淘汰策略
为什么要有这个机制?
当Redis的数据存储大于物理内存时,内存就会和磁盘产生频繁的交换(swap),涉及的磁盘操作、那就是慢!会导致Redis性能急剧下降;对于访问量巨大的Redis来说,一旦出现交换行为,那Redis相当于没起作用了;所以生产环境是不允许交换行为产生的!
因为要限制内存的使用!maxmemory参数,可以设置内容超出期望大小;当内容超过时,Redis就要启用淘汰策略,来腾出空间保证能够继续提供读写服务;
淘汰策略有哪些?
noeviction
不能继续进行写操作,只能读;这也是默认的淘汰策略;
volatile-lru
淘汰设置了过期时间的key,最少使用的key优先被淘汰;没有设置过期时间的key不会被淘汰,这样保证了需要持久化的数据不会丢失;
volatile-ttl
在设置了过期的key中,淘汰即将过期的key;
allkeys-lru
所有key均可能被淘汰,不只是设置了过期时间的;
allkeys-random
从所有key中,随机删除;
volatile-XX和allkeys-XX的区别是使用场景
-
volatile-XX:
- 只会淘汰过期的key;对于有持久化需求的,使用allkeys
-
allkeys-random:
- 会淘汰所有key;如果只是单纯的坐缓存使用,可以使用volatile-XX;那么没有设置了过期的key就不会被LRU算法淘汰;