栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

redis.conf详解之maxmemory

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

redis.conf详解之maxmemory

本文基于 redis_version:6.2.5

用法

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

maxmemory 

 

注意事项:

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

    maxmemory 100 裸数字情况:单位是字节。maxmemory 1K   K:代表1000字节。maxmemory 1KB KB:代表1024字节。maxmemory 1M   M:代表1000000字节。maxmemory 1MB MB: 代表1048576字节。maxmemory 1G   G:代表1000000000字节。maxmemory 1GB  GB: 代表1073741824字节。

 

实操

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

此时查看日志

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

 

源码实现

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

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

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

 

原生注释


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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/781748.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号