【94期】面试官:熟悉Redis吗,项目中你是如何对Redis内存进行优化的
程序员的成长之路
共 1447字,需浏览 3分钟
·
2020-11-21 04:24
阅读本文大概需要 5 分钟。
来自:cnblogs.com/niejunlei/p/12898225.html
一、reids 内存分析
226893824/209522728≈1.08
,使用的内存分配器是jemalloc。used_memory_rss
通常情况下是大于 used_memory
的,因为内存碎片的存在。二、redis 内存使用
https://www.cnblogs.com/niejunlei/p/12896605.html
1、对象内存
k-size + v-size
。2、缓冲内存
1)客户端缓存
client-output-buffer-limit slave 256mb 64mb 60
。maxclients最大连接数配置必不可少。
合理预估单次操作数据量(写或读)及网络时延ttl。
禁止线上大吞吐量命令操作,如keys等。
2)复制积压缓冲区
repl-backlog-size
,默认1M。单个主节点配置一个复制积压缓冲区。3)AOF缓冲区
3、内存碎片内存占用
三、redis 子进程内存消耗
1、关于linux系统的写时复制机制:
2、关于linux的透明大页机制THP(Transparent Huge Page):
3、关于linux配置:
vm.overcommit_memory=1
,以允许系统可以分配所有的物理内存。防止fork任务因内存而失败。四、redis 内存管理
1、内存上限:maxmemory
config set maxmemory {}
。2、内存回收
1)过期键删除:
需要说明的一点是,快慢模式执行的删除逻辑相同,这是超时时间不同。
2)内存溢出控制
noevication:默认不回收,达到内存上限,则不再接受写操作,并返回错误。
volatile-lru:根据LRU算法删除设置了过期时间的键,如果没有则不执行回收。
allkeys-lru:根据LRU算法删除键,针对所有键。
allkeys-random:随机删除键。
volatitle-random:速记删除设置了过期时间的键。
volatilte-ttl:根据键ttl,删除最近过期的键,同样如果没有设置过期的键,则不执行删除。
config set maxmemory-policy {}
maxmemory>used_memory
。推荐阅读:
【92期】面试官:你说你精通Java并发,那给我讲讲J.U.C吧
【91期】面试官:Spring 用了哪些设计模式?说三种即可
微信扫描二维码,关注我的公众号
朕已阅
评论