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

Redis面试之过期策略及内存淘汰机制

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

Redis面试之过期策略及内存淘汰机制

Redis过期策略主要有两个:
定期删除+惰性删除

1、定期删除
Redis 将每个设置了过期时间的 key 放到独立的字典中,默认每 100ms 扫描一次,大致流程为:

  • 随机选择 20 个 key
  • 删除 20 个 key 中过期的 key
  • 判断过期的 key 比例,如果超过总过期 key 数量的 1/4,再从步骤 1开始执行继续删除知道满足条件

那么问题来了,定期删除策略中为什么只随机扫描一些 key 而不是扫描所有的 key?

Redis 是单线程啊,设想一下,如果 key 都有过期时间,全部扫一遍会卡死的。而且为了防止每次扫描的时候,过期 key 的比例都超过了 1/4,从而导致一直循环把线程卡死,Redis 还给每次扫描设置了上限时间,默认 25ms。

你可能又会问了,既然是随机选择过期key,万一始终没随机到很多key,内存里面不就存在大量的无效key了么?

这时就需要另一种策略出马了,惰性删除

2、惰性删除
惰性嘛,字面意思就是懒,这时候 Redis 不去主动删除过期的 key-value,而是等客户端来读的时候再做判断,如果已经过期了,就把它删了然后返回空,没过期该怎么样怎么样。

那么问题来了,如果定期没删同时也没被查询的那些过期key怎么办,一直积累下去岂不是会发生内存泄漏?

此时就会用到 Redis 内存淘汰机制了,我们需要在 redis.conf 中的配置参数 maxmemory 去限制 Redis 可供使用的内存上限。当超出这个阈值时,Redis 会触发相应的内存淘汰机制,主要有以下 6 种:

上面的几种机制可通过 config set maxmemory-policy {policy} 语句配置。
 
 

 
 
 
 
 
 

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

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

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