首页 > 编程知识 正文

redis内存满了怎么办,redis超过内存

时间:2023-05-03 11:08:13 阅读:14648 作者:1915

1、过期策略我们set key的时候,都可以给expire time。 有效期限。 如果指定了这个key,例如只能活一个小时。 我们可以自己指定缓存过期后禁用。

如果你一批key只能活一个小时,接下来的一个小时后,redis是怎么删除这些key的?

答案是:定期删除惰性删除

定期删除是指redis随机提取默认情况下每100ms过期一次的密钥,检查是否过期,如果过期则删除。

注意这里不是每100ms遍历所有过期密钥,而是性能灾难。

实际上,redis每100ms随机抽取一些密钥进行检查并删除。

但是,如果定期删除,很多过期的密钥可能到了时间也不会被删除,所以必须惯性删除。

也就是说,获取某个密钥时,redis会检查该密钥是否已过期(如果设置了过期日期)。 过期后在此时删除。 什么都不还给我。

当key询问这个key时,redis应该更懒惰地检查,而不是到了时间就被删除

上述两种手段的结合,保证了过期的key一定会被杀死。

注意:但实际上这仍然存在问题。 如果因为定期删除而遗漏了很多过期的密钥,无法马上调查,也没有惯性删除,这个时候会怎么样?

如果内存中堆积了大量过期密钥,导致redis内存块丢失,该怎么办?

答案是:追溯内存销毁机制。

2、内存销毁机制redis内存消耗过多时,及时销毁内存。 有以下战略。

noeviction :如果内存不足以用任性的太阳写入数据,新写入操作将报告错误(通常无人使用,但默认情况下使用此策略)。

allkeys-lru :如果内存不足以用任性的太阳写入数据,请从密钥空间中删除最近最少使用的key (最常用)

allkeys-random (内存不足以用任性的太阳写入数据时,在密钥空间中随机删除某个key ) (通常无人使用)。

volatile-lru :内存不足,任性的太阳写入数据时,从已过期的密钥空间中删除最近最不使用的密钥(一般不太合适)。

volatile-random :内存不足以用任性的太阳写入数据时,在设定了有效期限的键空间中随机删除其中一个

key volatile-ttl :如果内存不足以用任性的太阳写入数据,则会优先删除设置了过期日期的密钥空间中有更早过期日期的密钥

redis的conf文件允许您配置内存处置策略。

打开配置式后,添加以下行并使用allkeys-lru中的过期策略:

最大内存策略所有密钥- LRU

保存并退出文件,然后重新启动redis服务。

如果未设置33558www.Sina.com/expire密钥,则不满足先决条件(prerequisites ); 在中,volatile-lru、volatile-random和volatile-ttl策略的行为与noeviction (不删除)基本一致。

也就是说,redis在ps:上确保了内存可用性。

转载地址: https://www.cn blogs.com/remix nameless/p/13410426.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。