首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Redis 高效删除key

一、大key删除问题 大key(bigkey)是指 key 的 value 是个庞然大物,例如 Hashes, Sorted Sets, Lists, Sets,日积月累之后,会变得非常大,可能几十上百...渐进式删除 思路: 分批删除,通过 scan 命令遍历大key,每次取得少部分元素,对其删除,然后再获取和删除下一批元素。...示例: 删除大 Hashes 步骤: (1)key改名,相当于逻辑上把这个key删除了,任何redis命令都访问不到这个key了 (2)小步多批次的删除 伪代码: # key改名 newkey = "gc...三、总结 使用 del 删除key可能会造成长时间阻塞,甚至崩溃。...可以使用渐进式删除,对 Hashes, Sorted Sets, Lists, Sets 分别处理,思路相同,先逻辑删除,对key改名,使客户端无法使用原key,然后使用批量小步删除

6.9K20

Redis过期key删除策略

key的过期时间都保存在过期字典中,如果一个键过期了,那么redis什么时候会被删除呢?...删除策略 (1)惰性删除key进行操作时才进行过期检查,对CPU最为友好,因为只有在不得不做的适合才进行操作,并且只涉及当前的目标key,与其他key无关,不浪费CPU资源 同样也有缺点,它对内存是最不友好的...,然后再进行当前命令的操作 (2)定期删除 每隔一段时间对数据库执行一次过期key检查,并通过对删除操作的执行时间和频率进行限制,来尽量减少对CPU的占用时间 定期删除有效降低了对内存的浪费,比较平衡的兼顾了...(3)AOF重写 和RDB方式的处理过程一样,会先检查key是否过期,过滤掉过期的key 主从复制过程对过期key的处理 (1)master中按照正常的删除策略执行 (2)slave的过期key删除由主服务器控制...: master执行过期key删除操作后,显式向slave发送删除命令,slave在收到删除命令之前,对过期key不做删除,如果收到客户端的命令请求,正常执行命令,收到删除命令后才进行删除

1.5K70

redis过期key删除策略

前言 在使用redis的过程中,不免会产生过期的key,而这些key过期后并不会实时地马上被删除,当这些key数量累积越来越多,就会占用很多内存,因此在redis底层同时使用了三种策略来删除这些key。...第一种策略:被动删除 当读/写一个key时,redis首先会检查这个key是否存在,如果存在且已过期,则直接删除这个key并返回nil给客户端。...清理过程如下: 遍历所有的db 从db中设置了过期时间的key的集合中随机检查20个key 删除检查中发现的所有过期key 如果检查结果中25%以上的key已过期,则继续重复执行步骤2-3,否则继续遍历下一个...关于big key的清理 在删除元素数量很多的集合(set/hash/list/sortedSet)时,无论是使用DEL命令删除还是redis为了释放内存空间而进行的删除,在删除这些big key的时候...使用lazy free删除big key时,和一个O(1)指令的耗时一样,亚毫秒级返回,然后把真正删除key的耗时动作交由bio后台子线程执行。

1.1K30

剖析Redis过期key删除策略

Marser整理了Redis中对于过期key的几种删除策略。下面Marser来带你装逼带你飞,带你熬翔到天黑。 Redis中过期key删除策略,分为三种:定时删除、定期删除、惰性删除。...1、定时删除 定时删除是在设置key的过期时间的同时,会创建一个定时器(timer)。定时器在key的过期时间来临时,立即执行对key删除操作。...此种删除策略可以保证过期key会尽可能快的被删除,并释放过期key所占用的内存。 但是此种策略对CPU时间是最不友好的。...3、惰性删除 惰性删除是定时删除和定期删除的折中处理方案。它放任key过期不管,但是每次获取key时,都会检查取得的key是否过期,如果过期,则删除key;若没有过期,就返回该key的值。...此策略对CPU时间来说是最友好的,只在取出key时,才对key进行过期检查,即只会在非做不可的情况下进行,并且删除的目标仅限于当前处理的key,不会在删除其他无关的过期key上花费任何CPU时间。

1K20
领券