内存限制
可以通过配置 maxmemory 来修改 Redis 的最大占用内存限制:
// 获取最大内存限制
127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "1073741824"
// 设置最大内存限制
127.0.0.1:6379> config set maxmemory 2048mb
OK
内存淘汰策略
当 Redis 占用的内存达到最大内存限制的时候,会触发内存淘汰策略。
目前 Redis 支持下列机种淘汰策略:
- noeviction:遇到使用更多内存的命令时 (大部分写命令),将会返回错误,不会回收内存 。
- allkeys-lru:回收最近最少使用的 key。
- volatile-lru:回收最近最少使用且有过期时间的 key。
- allkeys-random:随机回收 key。
- volatile-random:随机回收有过期时间的 key。
- volatile-ttl:根据过期时间从小到大排序,回收有过期的时间的 key。
- allkeys-lfu:回收最不经常使用的 key。
- volatile-lfu:回收最不经常使用且有过期时间的 key。
其中 allkeys-lfu 和 volatile-lft 从 Redis 4.0 才开始支持。
如果不存在有过期时间的 key,则 volatile-lru, volatile-random, volatile-ttl, volatile-lfu 的表现和 noeviction 一样。
关于 LRU ( Least Recently Used ) 和 LFU ( Least Frequently Used ) 的区别,可以参考:缓存淘汰算法 LRU 和 LFU
回收过程是怎么工作的
- 客户端发来添加数据的命令
- Redis 检查内存使用情况,如果超过了内存限制,就根据策略回收。
获取和配置回收策略
获取当前的策略:
127.0.0.1:6379> config get maxmemory-policy
1) "maxmemory-policy"
2) "noeviction"
设置策略:
127.0.0.1:6379> config set maxmemory-policy volatile-lru
OK