当前位置:首页 > 内存 > 正文

redis内存回收机制

  • 内存
  • 2024-06-06 08:35:32
  • 7657

一、Redis缓存淘汰策略

LRU(不太常用)是Redis支持的唯一回收算法。当缓存占用的内存达到配置的最大值时,旧数据将被自动删除。

一般情况:

Volatile-lru和Volatile-random的主要用例:在同时具有缓存和持久键的实例中,此类场景通常应使用单独的实例Redis。

值得注意的是,设置expire会消耗额外的内存,因此使用allkey-lru可以更有效地利用内存,因为它不需要设置过期时间。

Redis使用的并不是完整的LRU算法,而是近似的LRU算法。远程密钥不一定是最符合LRU特性的密钥。相反,它是使用近似LRU算法来选择的,然后删除具有最早访问时间的密钥。这样做的原因也是为了节省内存空间。从3.0新版本开始,使用池作为候选,显着提高了算法的效率,使得近似LRU算法越来越接近纯LRU算法。


二、Redis过期删除策略和内存淘汰策略

Redis可以使用expiration命令来设置过期时间在Redis内部,当我们设置某个key的过期时间时,Redis会将带有过期时间的key存储在一个过期字典中。当我们请求一个键时,Redis首先检查该键是否存在于过期字典中。如果存在,则获取其过期时间。然后将过期时间与当前系统时间进行比较。如果大于系统时间,否则还没有过期。

处理过期数据一般有三种方式:

Redis的过期删除策略:惰性删除和普通删除结合使用。

spring-boot-starter-data-redis包提供了过期日期监控类。对于密钥过期,您必须收到通知。

Springboot集成Redis参考,SpringBoot集成Redis-()
在Redis集成的基础上,新增监听配置

监听配置类

监听类

使用Redis作为缓存时,如果内存空间满了,旧数据会自动被丢弃。

Redis中有6种消除策略:

文件中有2个方可以配置策略:


三、redis高并发能力直接相关概念有

与Redis高并发能力直接相关的概念包括无序集合内存回收。

作为一种高效的内存数据库,Redis中最常用的数据结构之一就是无序集。无序集合是Redis中的Set,对应的有序集合是SortedSet。这两种数据结构都非常适合高并发场景下的数据操作。

无序集合是基于HashTable实现的结构,最常用的操作包括添加元素、删除元素和获取集合大小。与其他数据结构相比,无序集的最大优点是它们需要O(1)的计算时间。也就是说,即使集合中的元素很多,计算速度也是稳定的。关键是Redis的高并发能力。

Redis数据模型:

Redis的外围由键值映射的字典组成。与其他非关系数据库的主要区别在于,Redis值类型不仅限于字符串,还支持以下抽象数据类型:字符串列表、无序非重复字符串集合、有序非重复字符串集合、哈希表其键和值都是字符串。

值的类型决定了该值本身支持的操作。Redis支持高级的服务器端原子操作,例如各种无序和有序列表的交叉和连接,以及无序和有序集合的交叉和连接。Redis提供了五种数据类型:字符串、散列、列表、集合和zset(排序集)。