Redis 内存管理策略

背景

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的限制,则根据设定好的策略进行回收 新的命令被执行。。。

转载于:https://my.oschina.net/u/3778604/blog/1618756

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值