导图社区 Redis内存脑图
一张思维导图带你学习Redis内存的知识内容,包括内存消耗统计、内存消耗划分、子进程内存消耗、内存管理等。
这是一篇关于Codecademy - Javascript的思维导图,主要内容有Variables、Functions、lf statement、Switch statement、Loops等。
这是一篇关于js模块化的思维导图,主要内容有模块加载方案、前端模块化开发的价值、模块的循环引用。
typescript语法的思维导图,主要内容有基本数据类型、对象类型、任意类型Any、联合类型Union Types、元组Tuple等。
社区模板帮助中心,点此进入>>
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
域控上线
python思维导图
css
CSS
计算机操作系统思维导图
计算机组成原理
IMX6UL(A7)
考试学情分析系统
Redis内存
内存消耗统计
info memory:查看内存使用情况命令
used_memory:redis分配器分配的内存
used_memory_rss:操作系统的角度显示redis占用的内存
mem_fragmentation_ratio:内存碎片率
正常比率:1.03
>1:多出的内存是碎片
内存消耗划分
used_memor_rss
used_memory
redis进程自身内存
数据内存
缓冲内存
客户端缓冲
普通客户端:普通TCP连接(注意大量慢连接会使内存飙升)
从客户端:为主从复制建立的连接(主从网络不好或从结点过多占用内存大)
订阅客户端:pubsub功能建立的连接(消息产生的速度远大于消费的速度造成输出缓冲区溢出)
复制积压缓冲区:部分复制功能,默认1M,调大可以有效避免全量复制(如100M)
AOF缓冲区:redis重写期间保存写入的命令,通常占用小
内存碎片
默认内存分配器jemalloc
小:8byte, 16byte ...
大:4KB, 8KB ...
巨大:4MB, 8MB ....
产生原因
数据长短差异过大,频繁做更新操作:如append,setrange
数据长短差异过大,大量过期键删除
解决
尽量数据对齐
安全重启
子进程内存消耗
与父进程共享内存页,修改时使用“写时复制”技术
Transparent Huge Pages(THP)
copy-on-write期间复制内存页从4KB变成2MB
fork子进程的速度变慢
高并发下开启容易造成内存溢出,建议关闭
内存管理
设置内存上限
缓存场景,当超过maxmemory(对应used_memory)时触发删除策略释放内存
避免超过物理内存大小
动态设置内存上限
config set maxmemory
通过调小收缩内存会造成数据丢失和阻塞问题
内存回收机制
删除过期键
惰性删除
避免对每个键维护删除机制
查询时过期的键删除,返回空
无法删除过期但不查询的键
定时删除
10s运行一次
快慢模式回收
内存溢出回收策略
noeviction:默认,不删除键,拒绝写入
volatile-lru:根绝LRU算法删除设置超时的键
allkeys-lru:根据LRU算法删除所有键
allkeys-random:随机删除所有键
volatile-random:随机删除过期键
volatile-ttl:删除将最近要过期的键