Redis的maxmemory
支持的内存淘汰机制使得其成为一种有效的缓存方案,成为memcached的有效替代方案。
当内存达到maxmemory
后,Redis会按照maxmemory-policy
启动淘汰策略。
Redis 3.0中已有淘汰机制:
- noeviction
- allkeys-lru
- volatile-lru
- allkeys-random
- volatile-random
- volatile-ttl
maxmemory-policy | 含义 | 特性 |
---|---|---|
noeviction | 不淘汰 | 内存超限后写命令会返回错误(如OOM, del命令除外) |
allkeys-lru | 所有key的LRU机制 在 | 所有key中按照最近最少使用LRU原则剔除key,释放空间 |
volatile-lru | 易失key的LRU | 仅以设置过期时间key范围内的LRU(如均为设置过期时间,则不会淘汰) |
allkeys-random | 所有key随机淘汰 | 一视同仁,随机 |
volatile-random | 易失Key的随机 | 仅设置过期时间key范围内的随机 |
volatile-ttl | 易失key的TTL淘汰 | 按最小TTL的key优先淘汰 |
其中LRU(less recently used)经典淘汰算法在Redis实现中有一定优化设计,来保证内存占用与实际效果的平衡,这也体现了工程应用是空间与时间的平衡性。
PS:值得注意的,在主从复制模式Replication下,从节点达到maxmemory时不会有任何异常日志信息,但现象为增量数据无法同步至从节点。
Redis 3.0中近似LRU算法
Redis中LRU是近似LRU实现,并不能取出理想LRU理论中最佳淘汰Key,而是通过从小部分采样后的样本中淘汰局部LRU键。
Red