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

redis 内存淘汰策略

  • 内存
  • 2024-06-02 07:15:01
  • 1245

一、Redis缓存淘汰策略

LRU(最近较少使用)是Redis支持的唯一回收算法。当缓存占用的内存空间达到指定的最大空间时,旧数据将被自动丢弃。

总体来说:

挥发性-lru和挥发性-随机的主要应用场景是:在同时有缓存和持久化key的情况下,这种场景通常应该使用单独的Redis实例。

值得一提的是,设置expires会消耗额外的内存,所以使用allkey-lru可以更高效地利用内存,因为使用时不需要设置过期时间。

Redis使用的并不是完整的LRU算法,而是近似的LRU算法。被删除的key不一定是最满足LRU特性的key。而是通过近似LRU算法进行采样,然后删除访问时间最早的key。这样做的原因也是为了节省内存空间。从新版本3.0开始,使用池作为候选,大大提高了算法效率,使近似LRU算法越来越接近纯LRU算法。


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

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

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

Redis过期删除策略:惰性删除和定期删除配合使用。

spring-boot-starter-data-redis包提供了key过期类,如果你正在处理业务的话应该会收到通知。

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

监听配置类

监听类

使用Redis作为缓存时,如果内存空间已满,旧数据会自动刷新出来。

Redis中有6种消除策略:

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