redis 缓存策略
可用策略
- noeviction:返回错误当内存限制达到并且客户端尝试执行会让更多内存被使用的命令(大部分的写入指令,但DEL和几个例外)
- allkeys-lru: 尝试回收最少使用的键(LRU),使得新添加的数据有空间存放。
- volatile-lru: 尝试回收最少使用的键(LRU),但仅限于在过期集合的键,使得新添加的数据有空间存放。
- allkeys-random: 回收随机的键使得新添加的数据有空间存放。
- volatile-random: 回收随机的键使得新添加的数据有空间存放,但仅限于在过期集合的键。
- volatile-ttl: 回收在过期集合的键,并且优先回收存活时间(TTL)较短的键,使得新添加的数据有空间存放。
策略使用场景
策略 |
场景 |
原因 |
noeviction |
把redis当数据库用 |
因为数据库的数据多数情况下不应该被过期,宁愿数据库写入失败也不能有数据丢失 |
allkeys-lru |
大多数场景使用 |
大多数key不设置过期时间时使用这个 |
volatile-lru |
大多数场景使用 |
大多数key有过期时间时使用这个 |
allkeys-random |
没有场景 |
不可控 |
volatile-random |
没有场景 |
不可控 |
volatile-ttl |
没有场景 |
主要原因是取快过期的数据 时间复杂度太高了 |
例子
set k5 v5 ex 20; # 设置k5 的值为v5 20秒过期
expire k5 100; # 设置k5 的超时时间为100秒
expireat k5 xxx; # 设置k5的过期时间为xxx xxx为unix时间戳
淘汰策略
- 被动: 访问时如果过期再删,稍微牺牲内存但是保证了redis的性能
- 主动: 周期轮询
- redis 淘汰策略