Redis提供了以下几种主要的内存回收策略:
1.LRU回收:最少使用策略
根据key的最近使用时间,移除最久未使用的key。
2.LFU回收:最不经常使用策略
根据key的访问频率,移除最少访问的key。
3.随机回收
直接随机从内存中回收key。
4.TLL回收
根据key的过期时间存储,回收已过期key。
5.诊断回收
人为触发,移除指定的key。
6.MIGRATION回收
在执行KEYS command及 bilateral key relocation 时触发的回收。
7.淘汰策略转换
在内存回收阈值到达时,临时切换回收策略。
使用这些回收策略的方式:
- 设置内存大小上限:
maxmemory <bytes>
- 设置回收策略:
maxmemory-policy <policy>
# policy 可以是 lru、lfi 等
- 当内存超出上限时,会按策略回收key。
不同策略的优缺点:
- LRU : 最简单但会丢失活跃 key
- LFU : 考虑频率但算法复杂
- 随机:公平但敏感 key 可能被移除
- TLL: 移除已过期的key
- 诊断:针对性地移除key
综上, Redis提供了多种内存回收策略, 在设置合理的内存上限的基础上, 可以动态切换回收策略,更好地处理内存溢出。