Redis专栏-内存淘汰策略
Comment前言
作为一台服务器,它的内存肯定是有上限的,Redis是内存数据库,大量的数据保存在内存中,当内存空间达到瓶颈,超出了物理内存的上限时,就会导致内存操作频繁与磁盘进行交换,从而导致性能产生断崖式是下滑。
内存中保存的数据,大量的Key应该都并不是有用的,所以淘汰它们,释放所占空间,可以极大的提供内存的可使用量。
内存淘汰设置
Redis的内存淘汰策略与redis.conf
中配置的 maxmemory
和 maxmemory-policy
息息相关。
maxmemory(最大内存设置)
最大内存设置,默认是注释的,表示不做任何限制,单位是byte
字节。如果内存超出这个最大限制,Redis会根据配置的淘汰策略删除其他的KEY。
1 | maxmemory <bytes> |
maxmemory-policy(内存淘汰策略)
内存达到maxmemory
上限的时候,触发的淘汰策略,默认使用的策略为:noeviction
,即不做任何处理,这种情况,会直接提示写操作错误。
1 | maxmemory-policy <策略> |
注意:无论配置的是什么策略,都有可能不满足,所以,当没有合适的Key被逐出时,Redis都会在写入时返回操作错误
支持的淘汰策略
策略名称 | 策略描述 |
---|---|
volatile-lru | 仅限设置了失效时间的KEY,最近最少使用的 |
allkeys-lru | 针对所有的KEY,最近最少使用的 |
volatile-lfu | 仅限设置了失效时间的KEY,逐出使用频率最低的 |
allkeys-lfu | 针对所有的KEY,逐出使用频率最低的 |
volatile-random | 仅限设置了失效时间的KEY,随机逐出 |
allkeys-random | 针对所有的KEY,随机逐出 |
volatile-ttl | 仅限设置了失效时间的KEY,且优先逐出有效时间最短的(TTL) |
noeviction | 默认,不逐出任何内容,只返回一个写操作错误。 |
注:以上所有策略都不是精确算法,而是近似算法,这样做的目的是为了节省内存。
而且,可以通过maxmemory-samples
参数来调整它的速度或准确度,默认值为:5,表示Redis将检查5个Key并选择一个是最符合逐出条件的key。
值越大,检测精准度越高,但速度就越慢。正常来说,建议默认5个效果比较居中。
1 | maxmemory-samples 5 |
- 本文作者:沙果栗子本文链接:https://32e.co/2020/10/01/redis-maxmemory-policy/版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!