| — | — |
| volatile-lru | 根据 LRU 算法删除设置了过期时间的键,直到腾出可用空间。如果没有可删除的键对象,且内存还是不够用时,则报错 |
| allkeys-lru | 根据 LRU 算法删除所有的键,直到腾出可用空间。如果没有可删除的键对象,且内存还是不够用时,则报错 |
| volatile-lfu | 根据 LFU 算法删除设置了过期时间的键,直到腾出可用空间。如果没有可删除的键对象,且内存还是不够用时,则报错 |
| allkeys-lfu | 根据 LFU 算法删除所有的键,直到腾出可用空间。如果没有可删除的键对象,且内存还是不够用时,则报错 |
| volatile-random | 随机删除设置了过期时间的键,直到腾出可用空间。如果没有可删除的键对象,且内存还是不够用时,则报错 |
| allkeys-random | 随机删除所有键,直到腾出可用空间。如果没有可删除的键对象,且内存还是不够用时,则报错 |
| volatile-ttl | 根据键值对象的 ttl 属性, 删除最近将要过期数据。 如果没有,则直接报错 |
| noeviction | 默认策略,不作任何处理,直接报错 |
PS:淘汰策略也可以直接使用命令 config set maxmemory-policy <策略>
来进行动态配置。
LRU
全称为:Least Recently Used
。即:最近最长时间未被使用。这个主要针对的是使用时间。
Redis 改进后的 LRU 算法
在 Redis
当中,并没有采用传统的 LRU
算法,因为传统的 LRU
算法存在 2
个问题:
-
需要额外的空间进行存储。
-
可能存在某些
key
值使用很频繁,但是最近没被使用,从而被LRU
算法删除。
为了避免以上 2
个问题,Redis
当中对传统的 LRU
算法进行了改造,通过抽样的方式进行删除。
配置文件中提供了一个属性 maxmemory_samples 5
,默认值就是 5
,表示随机抽取 5
个 key
值,然后对这 5
个 key