一、懒惰删除介绍
在删除元素数量很多的集合(set/hash/list/sortedSet)时,无论是使用DEL命令删除还是redis为了释放内存空间而进行的删除,在删除这些big key的时候,会导致redis主线程阻塞。
在redis 4.0版本中,提供了lazy free(懒惰删除)的特性解决 big key 删除导致的主线程阻塞的问题。
使用lazy free删除big key时,和一个O(1)指令的耗时一样,亚毫秒级返回(返回结果不会产生等待阻塞),真正删除key的耗时动作交由后台子线程执行。
二、命令
惰性删除大集合:功能与DEL一致,当集合键的元素个数大于64个,会把真正的内存释放操作,交给单独的后台线程来操作
UNLINK biglist
惰性清理DB或全部数据
FLUSHDB ASYNC FLUSHALL ASYNC
三、配置
lazyfree-lazy-eviction yes/no
当redis使用内存达到maxmemory,并且设置淘汰策略时,决定淘汰过期键值对时是否使用惰性删除机制
注:该场景开启可能导致redis内存释放不及时
lazyfree-lazy-expire yes/no
设置有过期时间的key达到过期后,被redis清理删除时是否采用惰性删除机制,建议开启
lazyfree-lazy-server-del yes/no
有些命令在处理已存在的键时,会带有一个隐式的DEL键的操作。如RENAME命令,当目标键已存在,redis会先删除目标键,
如果是big key,也会产生阻塞问题,这时通过开启惰性删除机制也可以进行异步清理,建议开启
slave-lazy-flush yes/no
当进行slave进行全量数据同步,slave在加载master的RDB文件前,会运行FLUSHALL来清理自己的数据。
参数设置决定是否采用lazy free flush机制。如果内存变动不大,建议可开启。可减少全量同步耗时,从而减少主库因输出缓冲区爆涨引起的内存使用增长。
参考:
redis过期key的删除策略_自由de单车的博客-CSDN博客_redis 过期key清理策略



