Redis中的淘汰策略

这篇具有很好参考价值的文章主要介绍了Redis中的淘汰策略。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

本文主要说明在Redis面临key过期和内存不足的情况时,可以采用什么策略进行解决问题。

Redis中是如何应对过期数据的

正如我们知道的Redis是基于内存的、单线程的一个中间件,在面对过期数据的时候,Redis并不会去直接把它从内存中进行剔除,因为Redis是单线程的,如果出现了过期key就立马去删除,可能会影响到主要的业务的执行

在Redis中提供了以下两种删除过期键值的策略

惰性删除

工作原理: 惰性删除就出现过期了也不去管他,等某个请求访问到这条数据的时候,判断是否过期,过期就删除,并返回null
优点: 每次访问过期数据才会进行删除操作,占用相对较少的系统资源
缺点: 过期数据占用的空间清理不及时,导致空间利用率低,浪费内存空间

定期删除

工作原理: 每隔一段时间,检测数据库,随机删除一些过期数据
优点: 通过限制删除操作的时长和频率,来减少删除操作对主业务的影响,同时也能减轻内存空间的压力
缺点: 没有惰性删除的系统资源占用少,本身还是存在一定的空间浪费

定期删除工作流程

举个简单的例子:

  1. 定期中从设置过期时间的key字典中随机取出一定数量的key,
  2. 删除一定数量中过期key,
  3. 如果这个过期key占25%,重复1步骤

为了防止出现循环过度造成线程卡死,redis中设置了默认扫描时间25ms,流程图如下:
Redis中的淘汰策略,redis,数据库,缓存

Redis的内存淘汰策略

当Redis中的内存使用超过最大使用内存数后,会使用内存淘汰策略删除 来保证redis的正常运行

  1. noeviction(不淘汰): 当内存不足以容纳新写入数据时,新写入操作会报错。
  2. allkeys-lru(最近最少使用): 从键空间中选择最近最少使用的键淘汰。
  3. allkeys-lfu(最不经常使用): 从键空间中选择最不经常使用的键淘汰。
  4. allkeys-random(随机淘汰): 从键空间中随机选择键淘汰。
  5. volatile-lru(最近最少使用): 从设置了过期时间的键中选择最近最少使用的键淘汰。
  6. volatile-lfu(最不经常使用): 从设置了过期时间的键中选择最不经常使用的键淘汰。
  7. volatile-random(随机淘汰): 从设置了过期时间的键中随机选择键淘汰。
  8. volatile-ttl(最短过期时间): 从设置了过期时间的键中选择离过期时间最近的键淘汰。

这些淘汰策略可以通过在 Redis 配置文件或在运行时通过相关命令进行配置。根据具体业务需求和数据访问模式,选取合适的淘汰策略可以提高 Redis 的性能和内存利用率。

实际是三大类,noeviction、allkey-xxx、volatile-xxx

LRU 与 LFU

LRU (Last Recently Used)

LRU 策略按照最近最少使用的原则淘汰数据。当缓存空间不足时,会优先淘汰最长时间未被访问的数据。LRU 策略维护一个访问时间顺序的队列,每次访问数据时,将数据移动到队列的末尾。当需要淘汰数据时,从队列的头部淘汰最久未被访问的数据

LFU (Last Frequently Used)

LFU 策略按照最不经常使用的原则淘汰数据。LFU 策略维护每个数据被访问的频率信息,当缓存空间不足时,会优先淘汰访问频率最低的数据。LFU 策略需要为每个数据维护一个访问频率计数器,每次访问数据时,将对应的计数器值加一。当需要淘汰数据时,选择访问频率最低的数据进行淘汰文章来源地址https://www.toymoban.com/news/detail-670398.html

主要区别

  1. LRU 按照最近最少使用进行淘汰,LFU按照最不经常使用进行淘汰。
  2. LRU维护一个顺序表,LFU维护一个计数器
  3. LRU关注访问顺序,LFU关注访问频率
  4. LRU假设最近被访问的可能会被再次访问,LFU假设访问次数最少的键是最不常用的
以上是本文全部内容
感谢阅读

到了这里,关于Redis中的淘汰策略的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Redis_缓存2_缓存删除和淘汰策略

    14.5.1 过期数据 可以使用ttl查看key的状态。已过期的数据,redis并未马上删除。优先去执行读写数据操作,删除操作延后执行。 14.5.2 删除策略 redis中每一个value对应一个内存地址,在expires,一个内存地址,对应一个时间截,如果达到指定时间,就完成删除处理 三种删除策略

    2024年02月13日
    浏览(45)
  • (高阶) Redis 7 第19讲 缓存过期淘汰策略 大厂篇

    1. 生产上,redis内存设置的多少 2. 如何配置、修改Redis 内存大小 3. 如果内存满了,如何处理 4. Redis 清理内存的方式有哪些?定期删除和惰性删除了解吗 5. Redis 缓存淘汰策略有哪些?分别是什么?你用哪个 6. Redis 的LRU了解过吗?请手写LRU 7. LRU和LFU 算法的区别是什么  Redis 默

    2024年02月07日
    浏览(33)
  • Redis中的淘汰策略

    本文主要说明在Redis面临key过期和内存不足的情况时,可以采用什么策略进行解决问题。 正如我们知道的Redis是基于内存的、单线程的一个中间件,在面对过期数据的时候,Redis并不会去直接把它从内存中进行剔除,因为Redis是单线程的,如果出现了过期key就立马去删除,可能

    2024年02月11日
    浏览(32)
  • Redis缓存数据库

    目录 一、概述 1、Redis  2、Redis的安装 Redis Windows环境设置 3、String: 字符串 3.1、字符串 3.2、数值 3.3、bitmap 4、Hash: 散列 5、List: 列表 6、Set: 集合 7、Sorted Set: 有序集合 常识: 磁盘:1.寻址:ms(毫秒)2.带宽:MB/s 内存:1.寻址:ns    (纳秒) 2.带宽:GB/s 秒--毫秒--微妙--纳秒

    2024年02月04日
    浏览(43)
  • Redis缓存数据库(四)

    目录 一、概述 1、Redis Sentinel 1.1、docker配置Redis Sentinel环境 2、Redis存储方案 2.1、哈希链 2.2、哈希环 3、Redis分区(Partitioning)  4、Redis面试题 Redis Sentinel为Redis提供了 高可用解决方案 。实际上这意味着使用Sentinel可以部署一套Redis, 在没有人为干预的情况下去应付各种各样的失

    2024年02月05日
    浏览(42)
  • redis实战-缓存数据&解决缓存与数据库数据一致性

    缓存( Cache),就是数据交换的 缓冲区 ,俗称的缓存就是 缓冲区内的数据 ,一般从数据库中获取,存储于本地代码。防止过高的数据访问猛冲系统,导致其操作线程无法及时处理信息而瘫痪,这在实际开发中对企业讲,对产品口碑,用户评价都是致命的;所以企业非常重视缓存技术,

    2024年02月12日
    浏览(40)
  • redis数据库缓存服务器

    redis比mysql访问数据快 非关系型数据库以键值对的方式存储数据 作用:加快访问速度,缓解数据库压力 redis最新版本7 特点 丰富的数据结构 list,set,hash等数据结构的存储 支持持久化 支持事务 “一个完整的动作,要么全部执行,要么什么也没有做” 支持主从支持高可用,支持

    2024年02月05日
    浏览(44)
  • Redis如何保证缓存和数据库一致性?

    现在我们在面向增删改查开发时,数据库数据量大时或者对响应要求较快,我们就需要用到Redis来拿取数据。 Redis:是一种高性能的内存数据库,它将数据以键值对的形式存储在内存中,具有读写速度快、支持多种数据类型、原子性操作、丰富的特性等优势。 优势: 性能极高

    2024年01月16日
    浏览(53)
  • Redis---数据库和缓存如何保证一致性?

    用「读 + 写」请求的并发的场景来分析: 假如某个用户数据在缓存中不存在,请求 A 读取数据时从数据库中查询到年龄为 20,在未写入缓存中时另一个请求 B 更新数据。它更新数据库中的年龄为 21,并且清空缓存。这时请求 A 把从数据库中读到的年龄为 20 的数据写入到缓存

    2024年01月24日
    浏览(41)
  • Redis如何保障缓存与数据库的数据一致性问题?

    目录 一.最经典的数据库加缓存的双写双删模式 二. 高并发场景下的缓存+数据库双写不一致问题分析与解决方案设计 三、上面高并发的场景下,该解决方案要注意的问题 1.1 Cache Aside Pattern概念以及读写逻辑 (1)读的时候,先读缓存,缓存没有的话,那么就读数据库,然后取

    2023年04月21日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包