我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Redis缓存中的淘汰策略有哪些

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Redis缓存中的淘汰策略有哪些

本篇内容主要讲解“Redis缓存中的淘汰策略有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Redis缓存中的淘汰策略有哪些”吧!

Redis缓存中的淘汰策略有哪些

我们知道Redis缓存使用内存来保存数据,但内存大小毕竟有限,随着要缓存的数据量越来越大,有限的缓存空间不可避免地会被写满。这时候就需要缓存的淘汰策略去删除数据。

Redis缓存的淘汰策略

Redis的淘汰策略,根据是否会进行数据淘汰可以把它们分成两类:

  • 不进行数据淘汰的策略,只有 noeviction 这一种。

  • 会进行淘汰的 7 种其他策略。

会进行淘汰的 7 种策略,我们可以再进一步根据淘汰候选数据集的范围把它们分成两类:

  • 在设置了过期时间的数据中进行淘汰,包括 volatile-random、volatile-ttl、volatile-lru、volatile-lfu(Redis 4.0 后新增)四种。

  • 在所有数据范围内进行淘汰,包括 allkeys-lru、allkeys-random、allkeys-lfu(Redis 4.0 后新增)三种。

Redis缓存中的淘汰策略有哪些

在redis3.0之前,默认是volatile-lru;在redis3.0之后(包括3.0),默认淘汰策略则是noeviction

noeviction 策略

noeviction表示不淘汰数据,当缓存数据满了,有新的写请求进来,Redis不再提供服务,而是直接返回错误。

根据过期时间的淘汰策略

volatile-random、volatile-ttl、volatile-lru、volatile-lfu 四种策略是针对已经设置了过期时间的键值对。到键值对的到期时间到了或者Redis内存使用量达到了maxmemory阈值,Redis会根据这些策略对键值对进行淘汰;

  • volatile-ttl 在筛选时,会针对设置了过期时间的键值对,根据过期时间的先后进行删除,越早过期的越先被删除。

  • volatile-random 就像它的名称一样,在设置了过期时间的键值对中,进行随机删除。

  • volatile-lru 会使用 LRU 算法筛选设置了过期时间的键值对。

  • volatile-lfu 会使用 LFU 算法选择设置了过期时间的键值对。

所有数据范围内的淘汰策略

allkeys-lru、allkeys-random、allkeys-lfu 这三种策略淘汰的数据范围扩大到所有的键值对,无论这些键值对是否设置了过期时间,筛选数据进行淘汰的规则是:

  • allkeys-random 策略,从所有键值对中随机选择并删除数据;

  • allkeys-lru 策略,使用 LRU 算法在所有数据中进行筛选。

  • allkeys-lfu 策略,使用 LFU 算法在所有数据中进行筛选。

关于LRU算法

LRU算法即是最近最常使用算法,由于LRU会使用一个链表去维护使用的数据列表,当使用的数据越多,其移动元素时就会越耗时,这不可避免地会影响到Redis主线程。为此Redis对lru算法做了些简化。

LRU 策略的核心思想:如果一个数据刚刚被访问,那么这个数据肯定是热数据,还会被再次访问。

按照这个核心思想,Redis 中的 LRU 策略,会在每个数据对应的 RedisObject 结构体中设置一个 lru 字段,用来记录数据的访问时间戳。在进行数据淘汰时,LRU 策略会在候选数据集中淘汰掉 lru 字段值最小的数据(也就是访问时间最久的数据)。

所以,在数据被频繁访问的业务场景中,LRU 策略的确能有效留存访问时间最近的数据。而且,因为留存的这些数据还会被再次访问,所以又可以提升业务应用的访问速度。

具体做法是,在访问键值对时,redis会记录最近一次访问的时间戳。在redis决定淘汰数据时,会随机挑选N个数据,把它们作为一个候选集合,把最小的时间戳给筛选出去。当下一次要淘汰数据时,会挑选比第一次挑选的候选集合时间戳值要小的数据进入新的候选集合。当数据达到maxmemory-samples 时,将最小的值给淘汰掉。

通过该命令可以设置挑选的候选集合数CONFIG SET maxmemory-samples N

使用建议

依据策略的特性,可以针对不同场景选择不同的策略去淘汰数据。

  • 当缓存数据没有明显的冷热之分,即数据的访问频率差距不大,建议使用allkeys-random 随机策略淘汰数据;

  • 当数据有明显的冷热之分,建议使用allkeys-lru 或者volatile-lru 算法,将最近最常访问的数据留在缓存数据中;

  • 当业务中存在置顶需求,即不会过期的数据,这类一般不会设置过期时间,可以采用volatile-lru策略。这样这类数据就不会被淘汰,而其它数据可以根据lru规则进行淘汰。

到此,相信大家对“Redis缓存中的淘汰策略有哪些”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Redis缓存中的淘汰策略有哪些

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Redis内存淘汰策略有哪些

Least Recently Used (LRU):最少使用算法,根据键的最近使用时间来淘汰。First In First Out (FIFO):先进先出算法,根据键的插入时间来淘汰。Random:随机算法,随机选择一个键进行淘汰。L
Redis内存淘汰策略有哪些
2024-04-09

redis的内存淘汰策略有哪些

redis 提供了多项内存淘汰策略,以控制在内存不足情况下数据的处理方式。这些策略包括:noeviction:禁用内存淘汰,确保数据不会丢失。volatile-lru:淘汰最久未使用的已设置过期时间的键。volatile-ttl:淘汰过期时
redis的内存淘汰策略有哪些
2024-04-19

面试官问:Redis缓存淘汰策略有哪些?

惰性删除策略的缺点是,它对内存是最不友好的。如果一个键已经过期,而这个键又仍然保留在redis中,那么只要这个过期键不被删除,它所占用的内存就不会释放。

面试官问:Redis 缓存淘汰策略有哪些?

我们知道,redis一般会设置过期时间。那么这些键过期了是立刻从内存中删除吗?通常,键删除会有不同的策略。
Redis缓存2024-11-29

Redis的数据淘汰策略有哪些

Redis的数据淘汰策略有以下几种:LRU(Least Recently Used):最近最少使用。该策略会淘汰最近最少被访问的数据。LFU(Least Frequently Used):最不经常使用。该策略会淘汰最不经常被访问的数据。TT
Redis的数据淘汰策略有哪些
2024-04-09

redis 的 maxmemory 配置以及 缓存淘汰策略

1. maxmemory 相关介绍maxmemory 的作用设置 redis 可用内存的上限。maxmemory 的配置将 maxmemory 设置为零将导致没有内存限制。这是 64 位系统的默认行为,而32位系统使用 3GB 的隐式内存限制。maxmemor
redis 的 maxmemory 配置以及 缓存淘汰策略
2015-05-05

Redis的过期策略和内存淘汰策略

文章前言提到内存管理,我们就需要考虑Redis的内存过期策略和内存淘汰机制。该文章便从这两方面入手,分享一些在Redis内存方面相关的基础知识。文章中使用的示例版本为Redis5.0版本。内存过期策略内存过期策略主要的作用就是,在缓存过期之后,能够及时的将失效
Redis的过期策略和内存淘汰策略
2020-12-25

Redis的内存淘汰策略问题

Redis是基于内存的key-value数据库,因为系统的内存大小有限,所以我们在使用Redis的时候可以配置Redis能使用的最大的内存大小。

关于Redis的内存淘汰策略详解

目录一、什么是内存淘汰?二、Redis 内存上限三、Redis 内存淘汰策略四、内存淘汰的具体工作步骤五、LRU 算法及在 Redis 中的改进5.1 LRU 算法5.2 Redis 中的 LRU 算法六、LFU一、什么是内存淘汰?如果在
2023-05-19

Redis 缓存淘汰策略和事务实现乐观锁详情

目录缓存淘汰策略标题LRU原理标题Redis缓存淘汰策略设置最大缓存淘汰策略Redis事务Redis事务介绍MULTIEXECDISCARDWATCHRedis 不支持事务回滚(为什么呢)Redis乐观锁Redis乐观锁实现秒杀缓存淘汰策略
2022-07-21

编程热搜

目录