简介

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

这样子修改有可能导致数据不一致,建议保持默认