redis配置之内存设置
简介
redis 服务主要的操作都是在内存里面,而内存相对于磁盘还是小很多,因此调控好内存使用很重要。
最大使用内存
默认 redis 可以使用主机上的所有内存。如果一台机子上有多个实例,就不可能让redis使用系统的所有内存,况且操作系统也是需要一部分内存。
maxmemory 5gb
maxmemory 参数,单位可以是k、kb、m、mb、g、gb等
计算公式
# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes
动态设置
在运行过程中,也可以直接修改这个参数,但是不能带单位,需要转换成byte
config set maxmemory 5368709120
保存到配置文件
config rewrite
内存使用达到最大怎么处理
redis 提供了几种策略,当达到最大的内存使用量时,就会根据策略进行删除数据。
noeviction:默认策略,不淘汰,如果内存已满,添加数据是报错。
volatile-lru:在设置了过期时间的所有键中,选取最近最少使用的数据抛弃。
allkeys-lru:在所有键中,选取最近最少使用的数据抛弃。
volatile-lfu:在设置了过期时间的所有键中,选取最近最不常用的数据抛弃。
allkeys-lfu:在所有键中,选取最近最不常用使用的数据抛弃。
allkeys-random: 在所有键中,随机抛弃。
volatile-random: 在设置了过期时间的所有键,随机抛弃。
volatile-ttl:在设置了过期时间的所有键,抛弃存活时间最短的数据。
LRU表示最近最少使用
LFU表示最不常用
LRU、LFU和最小TTL算法不是精确算法,而是近似算法(为了节省内存),可以通过maxmemory-samples参数调整。
maxmemory-samples 3
默认情况下,Redis将检查五个键并选择最近使用较少的键。默认值5个产生足够好的结果,10非常接近真实的LRU,但比较消耗CPU。3个更快,但不太准确。
从节点最大使用内存策略
在 redis 5 之前,从节点的策略会遵循策略执行,在5之后就有了修改。
redis5默认情况下会忽略maxmemory参数,所有的过期删除操作都在主节点执行,并同步到从节点,以保证主从的一致。
当然这个策略也是可以修改的
replica-ignore-maxmemory no
这样子修改有可能导致数据不一致,建议保持默认
- 原文作者:Linux运维菜
- 原文链接:https://www.opcai.top/post/2020/2020-04/redis_config_memory/
- 版权声明:本作品采用进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。