Redis 内存管理策略


声明:本文转载自https://my.oschina.net/huaxian8812/blog/1618328,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

插播一条广告→2021 ByteDance字节跳动内推←各城市、各方向的岗位都有,大量招人!


背景

Redis很多时候都是在使用内存,数据一直写,但内存是有限的,如果Redis内存满了,那么我们的很多缓存操作都会超时、失败,接着可能会引发雪崩。那么当内存达到阀值Redis是怎么处理的呢?

配置内存限制maxmemory

我们可以通过在配置文件中配置maxmemory来限制内存的最大使用情况。如果maxmemory为0则表示无限制。 在redis.cn中配置如下配置:

maxmemory 1000mb //配置内存限制为1G 

默认的当内存达到我们配置的指定大小时会返回错误,异常为OOM异常,即已经没有足够的内存供试用。这是因为默认情况下Redis是不选择任何内存回收策略的。

配置内存回收策略

当内存达到最大限制时触发内存回收策略。我们可以通过maxmemory-policy来指定内存回收策略。 例如:maxmemory-policy volatile-ttl

Redis内置的策略种类

noeviction: 禁止驱逐数据(默认);当内存达到限制时并且客户端尝试执行一些消耗内存的命令时返回错误,即OOM异常。 **allkeys-lru:**尝试回收最少使用的键 **volatile-lru:**尝试回收最少使用的键,但仅限于在已设置过期集合的键。 allkeys-random: 回收随机的键 **volatile-random:**回收随机的键,仅限于在已设置过期集合的键。 **volatile-ttl:**回收过期集合的键,并且优先回收存活时间较短的键,使得新添加的数据有地方可存放。

4.x引入的策略

从redis4.0开始引入了一个新的策略模式:LFU全称:Least Frequently Used。即最近很少使用。 两种策略:volatile-lfuallkeys-lfu

volatile-lfu: 在已设置过期的数据集中选择最不常使用的数据淘汰 allkeys-lfu: 从数据集中挑选最近最不常使用的数据淘汰。

回收进程如何工作

当客户端运行了一个新的命令,添加了新的数据 Redis检查内存使用情况 ,如果大于maxmemory的限制,则根据设定好的策略进行回收 新的命令被执行。。。

本文发表于2018年02月05日 08:38
(c)注:本文转载自https://my.oschina.net/huaxian8812/blog/1618328,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 1183 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1