- Redis内存淘汰策略
1.1 内存维护解决方案
1.2 主要策略:分为LRU淘汰、TTL淘汰、Random淘汰、LFU淘汰
LRU与LFU是不同的
1.3 内存操作命令
- 过期策略
1. Redis内存淘汰策略
1.1 内存维护解决方案
在Redis的配置文件中redis.conf 中memeory managent
- volatile-lru:从设置过期时间的数据集中(expries)中挑选出最近最少使用的数据淘汰
- volatile-ttl:从设置过期时间的数据集中(expires)中挑选中将要过期的数据淘汰,ttl的值越大越优先被淘汰
- **volatile-random:**从设置过期时间的数据集(expries)中随机的选取数据淘汰
- **allkeys-lru:**从数据集(dict)中挑选最近最少使用的数据淘汰,该策略要淘汰的数据是全体key的集合,而非过期的key
- **allkeys-random:**从数据集(dict)中选择任意数据淘汰
- **noeviction:**禁止删除数据,当内存不足时,新写入操作就会报错,请求可以继续进行,保证已插入的数据不会丢失
- **volatile-lfu:**只从redisDb.expires中,也就是设置了过期时间的key中随机选取对应的key按照lfu规则移除
- **allkeys-lfu:**从redisDb.dict中,也就是全部key中随机选出对应的key按照lfu规则移除。
1.2 主要策略:分为LRU淘汰、TTL淘汰、Random淘汰、LFU淘汰
LRU策略:(最近最久未使用)核心思想,如果数据最近被访问过,那么将来被访问的几率也就会越高。
**TTL策略:**在Redis中设置过期时间的数据集expries中挑选数据,根据ttl 过期时间来进行淘汰,值越大越先淘汰。
**随机策略:**在数据集中随机数据的获取进行删除
**LFU策略:**Redis 4.0中新增策略,(最近最少使用)核心思想:如果数据在最近一段时间很少被访问到,那么认为数据在将来被访问的可能性也比较小,因此,当空间满时,最小访问频率的数据会被最先淘汰
LRU与LFU是不同的
LRU是最近最少使用页面置换算法(Least Recently Used),也就是首先淘汰最长时间未被使用的页面!
LFU是最近最不常用页面置换算法(Least Frequently Used),也就是淘汰一定时期内被访问次数最少的页!
1.3 内存操作命令

2. 过期策略
redis中对过期的数据的处理,通常有三种方式:
- 定时过期:对每个设置过期时间的key都需要建一个定时器,到达过期时间会立即清除。该方法对内存友好,对CPU不友好,会占用大量的CPU资源去处理过期数据;
- 惰性过期:只有当访问一个key时,才会判断key是否过期,该方案最大化的节省CPU资源,但会占用内存资源(对CPU友好,对内存不友好);
- 定期过期:每隔一定的时间,会扫描一定数据的expires字典中的一些数据,并清除掉其中已过期的数据