内存淘汰策略
最大内存设置
redis 默认内存是多少?
在 64 位操作系统不限制内存大小,在 32 位操作系统下最多使用 3GB。
查看 redis 最大内存?
Plain Text config get maxmemory
修改 redis 内存大小?
修改配置文件
在
redis.conf
第 859 行可以设置最大内存大小(单位是字节)。: set nu 可以显示文件行号
使用命令配置
config set maxmemory 100
redis 内存满了之后会怎样?
采用内存淘汰策略,默认是
no-enviction
,会抛出 OOM 异常。查看内存信息
Plain Text info memory
生产上一般怎么设置内存?
推荐设置内存为最大物理内存的四分之三。
redis内存淘汰策略
八种内存淘汰策略
在 redis.conf 文件中有体现。
- 2个范围
- 所有 key。
- 设置了过期时间的 key。
- 4个方式
- LRU 算法。
- LFU 算法。
- random - 随机删除。
- ttl - 删除马上要过期的。
- volatile-lru:对所有设置了过期时间的 key 使用 LRU 算法进行删除。
- allkeys-lru:对所有 key 使用 LRU 算法进行删除。
- volatile-lfu:对所有设置了过期时间的 key 使用 LFU 算法进行删除。
- allkeys-lfu:对所有 key 使用 LFU 算法进行删除。
- volatile-random :对所有设置了过期时间的 key 随机删除。
- allkeys-random :对所有 key 随机删除。
- volatile-ttl:删除马上要过期的 key。
- noeviction:默认的内存淘汰策略,禁止删除数据,能保证数据不丢失。当内存满了的时候,再写入数据会返回错误。
- LRU 算法:最近最久未使用。
- LFU 算法:最近使用次数最少。
设置内存淘汰策略
- 配置文件设置
在 redis.conf 配置文件中 maxmemory-policy
对应设置内存淘汰策略,注释提示了默认淘汰策略是 noeviction
。通过修改该配置就可以修改内存淘汰策略。
命令行设置
java// 获取maxmemory-policy配置127.0.0.1:6379> config get maxmemory-policy // 设置maxmemory-policy配置为allkeys-lru127.0.0.1:6379> config set maxmemory-policy allkeys-lru
如何选择内存淘汰策略
- 若所有数据访问频率一样,可以使用
allkeys-random
。 - 若有一部分是热点数据,有一部分是冷门数据,可以考虑使用
allkeys-lru
。 - 若希望有一部分数据被长期保存,而有些可以被删除。可以选择
volatile-lru
或volatile-random
。 - 若希望避免设置 key 的失效时间来减少内存的使用。可以使用
allkeys-lru
搭配 key 不设置过期时间来高效利用内存。