1、redis缓存过期机制
Redis可以通过设置一个过期时间expire来处理缓存,Redis删除过期缓存有两种方法:
- 定期删除:Redis会随机抽查key,如果过期则删除,默认配置为1秒10次,也可以提高频率,但是频率越高,cpu压力越大
# 定期删除频率配置,表示1秒10次
hz 10
- 惰性删除:表示当用户读取Redis缓存时,会检查key是否过期,如果过期则直接删除,这种方法会消耗大量内存去存已过期的键值对
总结:以上两种方法优缺很明显,Redis使用的缓存过期机制是:惰性删除加上定期删除,两者配合使用。
2、Redis内存淘汰机制
Redis的高性能原至于内存,不管是8个G还是16个G,都是有上限的,而当这个内存到达最大阈值(maxmemory),就不得不删除一部分不重要的缓存来腾出空间给新的数据使用,其中maxmemory可以自己设置大小。Redis中内存淘汰策略:
redis 最大内存不足时,数据清除策略,默认为"noeviction"
volatile-lru -> "过期集合"中的数据采取LRU(近期最少使用)算法.
如果对key使用"expire"指令指定了过期时间, 那么此key将会被添加到"过期集合"中。
首先将已经过期的数据优先移除. 若不能满足最大内存maxMemory设置,
继续使用LRU算法删除设置expire但还是没有过期的key,
如果"过期集合" 中全部移除仍不能满足内存需求,将OOM(内存不足错误).
allkeys-lru -> 对所有的数据,采用LRU(近期最少使用)算法,
volatile-random -> 对"过期集合"中的数据采取"随即选取"算法,并移除选中的K-V,直到"内存足够"为止.
如果"过期集合" 中全部移除全部移除仍不能满足,将OOM(内存不足错误)
allkeys-random -> 对所有的数据,采取"随机选取"算法,并移除选中的K-V,直到"内存足够"为止
volatile-ttl -> 对"过期集合"中的数据采取TTL算法(最小存活时间),移除即将过期的数据.
noeviction -> 不做任何干扰操作,直接返回OOM异常
## 相关配置
maxmemory 124000000 # 字节
maxmemory-policy noeviction