文章目录
Redis中通过maxmemory参数来设定内存的使用上限,当Redis使用内存达到阈值时,会根据配置文件中的设置选取要删除的key来删除,从而给新的键值留出空间。
Redis种有6种淘汰策略
6种淘汰策略
volatile-lru
LRU算法,在设置过期时间的键中,选取一个最近最少使用的key淘汰掉
volatile-ramdom
在设置了过期时间的键中,随机选取一个key淘汰
volatile-ttl
在设置了过期时间的键中,选取一个即将要过期的key淘汰
allkeys-lru
在所有键中,选取一个最近最少使用的key淘汰掉
allkeys-random
在所有键中,随机选取一个淘汰
noeviction(默认使用)
当内存到达阈值后,所有申请内存的操作都会报错
上面6种方案是让我们选出应该淘汰的键,那具体要怎么样进行删除呢?Redis中有3种删除过期键策略
3种删除过期键策略
定时删除
在设置键的过期时间的同时,设置一个定时器,当键过期了,定时器马上把该键删除。
定时删除对内存来说是友好的,因为它可以及时清理过期键;但对CPU是不友好的,如果过期键太多,删除操作会消耗过多的资源。
惰性删除
在键过期时,放任不管,如果后来有请求来查询该键,检测到该键已经过期了,此时才将这个键删除掉。
惰性删除对CPU是友好的,因为只有在读取的时候检测到过期了才会将其删除。但对内存是不友好,如果过期键后续不被访问,那么这些过期键将积累在缓存中,对内存消耗是比较大的。
定期删除
定期删除是定时删除和惰性删除的一个折中方案。每隔一段时间来删除过期键,可以根据实际场景自定义这个间隔时间,在CPU资源和内存资源上作出权衡。