开发者社区> 问答> 正文

当Redis内存达到maxmemory后,每次写入新的数据之前需要做什么?

已解决

当Redis内存达到maxmemory后,每次写入新的数据之前需要做什么?

展开
收起
游客lmkkns5ck6auu 2022-10-11 17:31:12 594 0
1 条回答
写回答
取消 提交回答
  • 推荐回答

    当Redis内存达到maxmemory后,每次写入新的数据之前,Redis必须先从实例中踢出一部分数据,让整个实例的内存维持在maxmemory之下,然后才能把新数据写进来。

    这个踢出旧数据的逻辑也是需要消耗时间的,而具体耗时的长短,要取决于你配置的淘汰策略:

    •allkeys-lru:不管key是否设置了过期,淘汰最近最少访问的key; •volatile-lru:只淘汰最近最少访问、并设置了过期时间的key; •allkeys-random:不管key是否设置了过期,随机淘汰key; •volatile-random:只随机淘汰设置了过期时间的key; •allkeys-ttl:不管key是否设置了过期,淘汰即将过期的key; •noeviction:不淘汰任何key,实例内存达到maxmeory后,再写入新数据直接返回错误; •allkeys-lfu:不管key是否设置了过期,淘汰访问频率最低的key(4.0+版本支持); •volatile-lfu:只淘汰访问频率最低、并设置了过期时间key(4.0+版本支持)。

    一般最常使用的是allkeys-lru/volatile-lru淘汰策略,它们的处理逻辑是,每次从实例中随机取出一批key(这个数量可配置),然后淘汰一个最少访问的key,之后把剩下的key暂存到一个池子中,继续随机取一批key,并与之前池子中的key比较,再淘汰一个最少访问的key。以此往复,直到实例内存降到maxmemory之下。

    需要注意的是,Redis的淘汰数据的逻辑与删除过期key的一样,也是在命令真正执行之前执行的,也就是说它也会增加我们操作Redis的延迟,而且,写OPS越高,延迟也会越明显。以上内容摘自《阿里开发者手册-Redis专题》电子书,点击https://developer.aliyun.com/ebook/download/7770 可下载完整版

    2022-10-12 23:14:22
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
阿里云开发者社区官方技术圈,用户产品功能发布、用户反馈收集等。
问答排行榜
最热
最新

相关电子书

更多
Redis在唯品会的应用实践——架构演进与功能定制 立即下载
微博的Redis定制之路 立即下载
云数据库Redis版的开源之路 立即下载