首页 > 编程知识 正文

redis过期策略,redis内存满了怎么办

时间:2023-05-06 13:30:18 阅读:14714 作者:3609

我相信Redis缓存是提高系统性能的最好方法,大家一定不知道。 作为秃顶的老代码农民,不仅需要了解Redis的基础使用方法,还需要了解Redis的相关原理,包括Redis的过期策略和内存处置机制。

众所周知,Redis缓存正在使用内存资源。 缓存服务器配置相对较高的内存资源,但如果忽略Redis中的缓存数据,内存资源可能会耗尽。 在这种情况下,缓存服务器将无法向外部提供服务。 要在有限的服务器资源上支持更多的业务服务,必须删除不经常访问的缓存,为新缓存留出内存空间。

Redis主要通过两种方式实现密钥值的清理:过期策略和内存处置机制。

内存处置策略

在Redis节点分配的内存使用量达到最大值后,为了继续服务,Redis将启动内存处置策略。 Redis4.0以前主要是以下六种处置策略:

noeviction :不销毁数据。 如果内存不足,则执行添加缓存操作时会发生错误。 此策略确保数据不会丢失,也是Redis的默认内存销毁策略。

all keys-LRU :删除整个键值中最早未使用的键值,称为LRU算法。

所有密钥随机:随机丢弃任何密钥值。

volatile-lru :放弃所有已设置过期的键值中最旧的键值。

volatile-random :随机丢弃设置为过期日期的任何键值。

volatile-ttl :优先废弃已设定到期日期的键值。

从上面的内存销毁策略可以看出,以allkeys-开头的显示将从所有key中销毁数据,以volatile-开头的显示将从已过期的key中销毁数据。

redis 4.0版添加了两种处置策略:

allkeys-lfu丢弃整个键值中最少使用的键值。 这是人们常说的LRU算法。

volatile-lfu。 删除所有设置了过期日期的密钥中最少使用的密钥。

最近邻(LRU )基于最近使用的时间来优先丢弃离当前位置最远的数据;

在一段时间内,最少使用缓存数据的lfu (最少使用)将被丢弃。

可以在redis.conf配置文件中更改设置项maxmemory-policy,将其更改为需要设置的类型。

缓存过期策略

内存销毁策略是内存不足时发生的机制,是缓存服务级别操作,过期策略定义了特定缓存数据何时失效。 我们在使用Redis时,经常会对Redis的密钥设置类似于EXPIRE key 30的有效期。 过期策略是指Redis中缓存的密钥过期时Redis如何处理。

对于过期的数据,Redis使用两个策略来删除这些过期的键值。 分别是惯性删除、定期删除。

惯性删除

惯性删除是指,当Redis服务器不主动删除过期的密钥值,而是客户端尝试获取某个密钥值时,Redis首先检测该密钥是否过期,如果未过期则返回给客户端,如果过期则删除该密钥

惯性删除可以解决已过期但不定期删除的随机提取的密钥。 但是,如果某些过期的密钥不是随机提取的或由客户端访问的,它们可能会保留在数据库中,消耗内存,并长期耗尽内存。 Redis为解决这个问题提供了内存销毁机制。

惯性删除的优点只是不浪费系统资源,每次访问时都检查密钥值是否过期。 缺点是,如上所述,来不及删除过期的密钥,浪费了一定的空间。

定期删除

定期删除是指Redis服务每隔一段时间检查缓存数据库,以确定是否可以清除过期密钥。 默认情况下,Redis定期检查的频率为每秒10次,用于定期清除过期密钥。 当然,该值也可以在配置文件中设置。 在redis.conf中更改配置“hz”即可。 默认值为" hz 10 "。

key太多,全面扫描所有key会非常消耗性能,因此定期删除会随机抽取一些key进行删除。 这样可能删除不完,需要惯性删除合作。

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