redis.conf详解之maxmemory

Redis内存管理
本文介绍Redis中maxmemory配置项的使用方法及其注意事项,包括如何通过该配置限制节点的最大内存使用量,不同单位的表示方法,以及当达到最大内存限制时Redis的行为表现。

本文基于 redis_version:6.2.5

用法

控制节点能使用的最大内存

maxmemory <bytes>

 

注意事项:

  • maxmemory的默认值是0,也就是不限制内存的使用。
  • 32bit系统如果使用默认配置或配置为maxmemory 0则最大使用3G内存(详见下方源码)。
  • maxmemory的值没有最小限制(但是如果低于1MB,会打一条WARNING日志)。
  • 如果设置了maxmemory选项(值 >= 1),redis在接收命令时总是会判断当前是否已经超出最大内存限制,如果超过限制会根据驱逐策略去释放内存(如果是同步释放且释放内存很大,则会阻塞其他命令的执行)。
  • 单位问题:
    1. maxmemory 100 裸数字情况:单位是字节。
    2. maxmemory 1K   K:代表1000字节。
    3. maxmemory 1KB KB:代表1024字节。
    4. maxmemory 1M   M:代表1000000字节。
    5. maxmemory 1MB MB: 代表1048576字节。
    6. maxmemory 1G   G:代表1000000000字节。
    7. maxmemory 1GB  GB: 代表1073741824字节。

 

实操

[1] 假设当前实例已使用2MB内存,且不限制最大内存, 且驱逐策略为noeviction,此时手动设置最大可使用内存为1MB,会发生什么?答:可以设置成功,且任何key都不被驱逐。

1.png

此时查看日志

翻译:新设置的1MB最大可使用内存小于当前已经使用的2263072字节。最终会根据驱逐策略接受/不接受新的写入命令。
# WARNING: the new maxmemory value set via CONFIG SET (1048576) is smaller than the current memory usage (2263072). This will result in key eviction and/or the inability to accept new write commands depending on the maxmemory-policy.

当前使用的内存(2MB)已经超出最大内存设置(1MB),并且驱逐策略是不驱逐(noeviction),所以导致之前的key不会被清理(依然是已用2MB)。如果此时我要写入一个key,能否成功?答:新的写入将被拒绝并报错。看下面的实操。

2.png

[2] 假设当前实例已使用970MB左右内存,且不限制最大内存, 且驱逐策略为allkeys-lru,且同步驱逐。此时手动设置最大可使用内存为100MB,会发生什么?答:可以设置成功,但命令会被阻塞一定时间(时间长短取决于要释放多少内存等因素)(config set maxmemory 100MB也是一条命令)。

3.png

 

源码实现

[1] 32bit系统最大可使用内存是4G,如果用户不限制最大可使用内存,redis默认使用3G且驱逐策略设置为noeviction(noeviction:到达内存使用阀值时,不淘汰key,但遇到申请内存的命令会报错)。

0 (4).png

[2] 如果maxmemory 在(0,1MB)之间会打一条日志,但是依然能设置成功。

0 (3).png

[3] 普通主从模式,每次接收命令都会判断是否超过最大使用内存。

0 (2).png

 

原生注释

注释.png


本文属于原创,首发于微信公众号【小易哥学呀学】,如需转载请后台留言。

Redis是一个开源的高性能键值对存储数据库,其配置文件redis.conf包含了Redis的所有配置项。下面是redis.conf文件中一些重要配置项的详解: 1. bind:指定Redis监听的IP地址,默认为127.0.0.1,表示只能本地访问,如果要让其他主机访问,需要将其设置为0.0.0.0。 2. port:指定Redis监听的端口号,默认为6379。 3. daemonize:指定Redis是否以守护进程方式运行,默认为no,表示以前台进程方式运行,如果要以守护进程方式运行,需要将其设置为yes。 4. logfile:指定Redis的日志文件路径,默认为stdout,表示将日志输出到标准输出,如果要将日志输出到文件,需要指定日志文件路径。 5. databases:指定Redis支持的数据库数量,默认为16个,可以通过修改该配置项增加数据库数量。 6. maxclients:指定Redis同时连接的客户端数量,默认为10000,如果要支持更多的客户端连接,需要将其设置为更大的值。 7. maxmemory:指定Redis使用的最大内存量,如果超过该值,Redis会按照一定的策略选择一些键进行删除,默认为0,表示不限制内存使用量。 8. appendonly:指定Redis是否开启持久化功能,默认为no,表示不开启持久化功能,如果要开启持久化功能,需要将其设置为yes。 9. requirepass:指定Redis的访问密码,如果设置了该密码,客户端需要提供正确的密码才能访问Redis。 以上是redis.conf文件中一些重要配置项的详解,通过修改这些配置项可以对Redis进行定制化配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值