一起聊聊Redis缓存的淘汰策略


redis 缓存有哪些淘汰策略?本篇文章就来和大家一起聊聊redis缓存的淘汰策略,介绍缓存策略设置建议,希望对大家有所帮助!

一起聊聊Redis缓存的淘汰策略

Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。【相关推荐:Redis视频教程】

它具备以下的特征:

  • 基于内存运行,具备高性能的特点
  • 支持分布式,理论上可以无限拓展
  • key-value 存储结构,查询高效
  • 提供多种开发语言 API, 容易和现有的业务系统集成。

通常在业务系统种用作分布式缓存,集中式 Session 存储, 分布式锁等运用场景。

不管是本地缓存还是分布式缓存,为了保证较高性能,都是使用内存来保存数据,由于成本和内存限制,当存储的数据超过缓存容量时,需要对缓存的数据进行剔除。 一般的剔除策略有 FIFO 淘汰最早数据、LRU 剔除最近最少使用、和 LFU 剔除最近使用频率最低的数据几种策略。

Redis 缓存淘汰策略触发

在生产环境中我们是不允许 redis 出现 swap 行为的。所以一般会限制最大的使用内存,redis 提供了配置参数 maxmemory 来规定最大的使用内存。

以下配置均为合法:

maxmemory 1000KB 
maxmemory 100MB 
maxmemory 1GB 
maxmemory 0  # 表示不做限制,一般不会用

redis.conf 配置文件如下

1.png

8 种 Redis 缓存策略

  • volatile-lru 设定超时时间的数据中,删除最不常用的数据;

  • allkeys-lru 查询所有的key 中最不常使用的数据进行删除,这是应用最广泛的策略;

  • volatile-random 在已经设定了超时的数据中随机删除;
  • allkeys-random 查询所有的 key 之后随机删除;
  • volatile-ttl 查询全部设定超时时间的数据,追后马上排序,将马上将要过期的数据进行删除操作;
  • noeviction (默认) 如果设置为该属性,则不会进行删除操作,如果内存溢出则报错返回;
  • volatile-lfu 从所有配置了过期的时间的键中驱逐使用频率最少的键;

  • allkeys-lfu 从所有键中驱逐使用频率最少的键;

Redis 种的 LRU 与 LFU 算法

LRU 算法

Redis LRU 算法不是一个精确的实现。这意味着 Redis 无法选择最佳的驱逐候选者,即过去访问次数最多的访问。相反,它会尝试运行 LRU 算法的近似值,方法是对少量密钥进行采样,然后逐出采样密钥中最好的(具有最早访问时间)的密钥。

然而,从 Redis 3.0 开始,该算法得到了改进,也可以选择一些好的候选者进行驱逐。这提高了算法的性能,使其能够更接近真实 LRU 算法的行为。

Redis LRU 算法的重要之处在于,您可以通过更改样本数量来调整算法的精度,以检查每次驱逐。此参数由以下配置指令控制:

maxmemory-samples 5

Redis 之所以不使用真正的 LRU 实现,是因为它需要更多的内存。然而,对于使用 Redis 的应用程序,近似值实际上是等效的。下面是Redis使用的LRU近似与真实LRU的对比图。

2.png

生成上述图表的测试使用给定数量的键填充了 Redis 服务器。从第一个到最后一个访问密钥,因此第一个密钥是使用 LRU 算法驱逐的最佳候选者。后来又添加了 50% 的密钥,以强制驱逐一半的旧密钥。

您可以在图中看到三种点,形成三个不同的带。

  • 浅灰色带是被驱逐的对象。
  • 灰色带是未被驱逐的对象。
  • 绿色带是添加的对象。

在理论上的 LRU 实现中,我们预计在旧密钥中,前半部分将过期。Redis LRU 算法只会在概率上使旧密钥过期。

SONIFY.io SONIFY.io

设计和开发音频优先的产品和数据驱动的解决方案

SONIFY.io 83 查看详情 SONIFY.io

LRU 只是一个模型,用于预测给定密钥在未来被访问的可能性。此外,如果您的数据访问模式非常类似于幂律,则大多数访问将位于 LRU 近似算法能够很好处理的键集中。

缺点:可能会存在一定时间内大量的冷数数据被访问产生大量的热点数据

LFU 算法

从 Redis 4.0 开始,可以使用新的最不常用驱逐模式。这种模式在某些情况下可能会更好(提供更好的命中率/未命中率),因为使用 LFU Redis 会尝试跟踪项目的访问频率,因此很少使用的项目会被驱逐,而经常使用的项目有更高的机会留在记忆中。

如果您认为在 LRU,最近访问过但实际上几乎从未被请求过的项目不会过期,因此风险是驱逐将来有更高机会被请求的密钥。LFU 没有这个问题,一般应该更好地适应不同的访问模式。

配置LFU模式,可以使用以下策略:

  • volatile-lfu 在具有过期集的键中使用近似 LFU 驱逐。
  • allkeys-lfu 使用近似 LFU 驱逐任何密钥。

LFU 类似于 LRU:它使用一个概率计数器,称为莫里斯计数器,以便仅使用每个对象的几位来估计对象访问频率,并结合衰减周期,以便计数器随着时间的推移而减少:在某些时候,我们不再希望将密钥视为经常访问的密钥,即使它们过去是这样,以便算法可以适应访问模式的转变。

这些信息的采样与 LRU 发生的情况类似(如本文档的前一部分所述),以便选择驱逐的候选人。

然而,与 LRU 不同的是,LFU 具有某些可调参数:例如,如果不再访问频繁项,它的排名应该以多快的速度降低?还可以调整 Morris 计数器范围,以便更好地使算法适应特定用例。

默认情况下,Redis 4.0 配置为:

  • 在大约一百万个请求时使计数器饱和。
  • 每一分钟衰减一次计数器。

这些应该是合理的值并经过实验测试,但用户可能希望使用这些配置设置以选择最佳值。

有关如何调整这些参数的说明可以redis.conf在源代码分发的示例文件中找到,但简单地说,它们是:

lfu-log-factor 10 
lfu-decay-time 1

衰减时间是显而易见的,它是计数器应该衰减的分钟数,当采样并发现它比该值更旧时。一个特殊值0意味着:每次扫描时总是衰减计数器,很少有用。

计数器对数因子会改变需要多少次命中才能使频率计数器饱和,这恰好在 0-255 的范围内。系数越高,需要越多的访问以达到最大值。根据下表,系数越低,低访问计数器的分辨率越好:

+--------+------------+------------+------------+------------+------------+
| factor | 100 hits   | 1000 hits  | 100K hits  | 1M hits    | 10M hits   |
+--------+------------+------------+------------+------------+------------+
| 0      | 104        | 255        | 255        | 255        | 255        |
+--------+------------+------------+------------+------------+------------+
| 1      | 18         | 49         | 255        | 255        | 255        |
+--------+------------+------------+------------+------------+------------+
| 10     | 10         | 18         | 142        | 255        | 255        |
+--------+------------+------------+------------+------------+------------+
| 100    | 8          | 11         | 49         | 143        | 255        |
+--------+------------+------------+------------+------------+------------+

淘汰最近一段时间被访问次数最少的数据,以次数作为参考。

缺点:

1. 最近加入的数据常常容易被剔除,因为其起始方法次数比较少,

2. 如果频率时间度量为 1 个小时,则平均一天每个小时内访问频率 1000 的热点数据可能会被 2个小时的一段时间访问的频率为 1001 的数据剔除掉。可能会出现一些临界值的数据。

缓存策略设置建议

建议:了解Redis 的淘汰策略之后,在平时使用尽量主动设置/更新 key 的 expire 时间主动剔除不活跃的旧数据, 有助于提升查询性能

更多编程相关知识,请访问:编程入门!!

以上就是一起聊聊Redis缓存的淘汰策略的详细内容,更多请关注其它相关文章!


# 缓存  # 淘汰策略  # 第一个  # 更高  # Redis  # 上海企业营销型网站建设  # 鸡西网站优化团队推广  # 罗湖产品网站优化公司  # 湖北互联网营销推广  # 南坪网站推广优化  # 小红书短视频营销推广  # 珲春关键词优化排名  # 模板网站建设选哪家  # 杨浦抖音营销推广学习  # 阿坝网站seo公司  # 如何实现  # 未被  # 网络带宽  # 最不  # 类似于  # 理论上  # 可以使用  # 使用频率 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 《猎聘》筛选猎头岗位方法  猫眼电影app如何参与官方的抽奖活动_猫眼电影官方抽奖参与方法  《土豆雅思》修改密码方法  优化 React onClick 事件处理:函数引用与箭头函数的对比  手机远程连接电脑方法  火狐浏览器如何刷新修复浏览器 火狐浏览器“重置Firefox”功能详解  b站怎么设置动态仅粉丝可见_b站动态粉丝可见设置方法  餐馆菜篮选购指南  《米姆米姆哈》米姆获取及技能攻略  《腾讯相册管家》注销账号方法  PHP页面重载时变量值不重置的实现方法  创建您的便携版VS Code:让配置随身携带  mysql中外键约束如何使用_mysql FOREIGN KEY操作  《气泡星球》兑换码礼包大全  外卖小程序对接第三方配送  一点万象签到领积分指南  漫蛙app官方版手机正版入口-漫蛙漫画manwa在线漫画正版入口  腾讯QQ邮箱官方入口 QQ邮箱网页版登录平台  poki官网最新入口 poki小游戏大全入口  我的世界游戏平台入口 我的世界官方官网直达链接  百度浏览器无法安装扩展程序_百度浏览器插件安装失败原因解析  铁路12306买票怎么选双人铺 铁路12306卧铺分配规则说明  荣耀盒子应用管理技巧  如何在CSS中使用伪类选择器_hover实现悬停效果  喜茶GO更换登录账号方法  京东快递包裹信息查询入口 京东快递官方查询平台入口  微信网页版在线登录 微信网页版在线使用入口  《盗墓笔记手游》技能介绍  Win11怎么录屏_Windows 11自带Xbox Game Bar录制视频  吃完饭就犯困是什么原因 餐后嗜睡如何缓解  《异星探险家》古怪的物品作用介绍  c++中的const关键字用法大全_c++ const正确使用指南  菜鸟裹裹怎样获得取件码_菜鸟裹裹获得取件码步骤  sublime如何处理超大文件不卡顿 _sublime打开大日志文件技巧  之了课堂app做题入口  Lar*el Eloquent:高效删除多对多关系中无关联子记录的父模型  Lar*el 中高效执行多列更新:单次查询实现  Python定时发送QQ消息  抖音网页版官方链接 抖音网页版官网链接入口  《杖剑传说》食谱大全  search中maxlength属性用法解析  C#解析并修改XML后保存 如何确保格式与编码的正确性  Excel怎么用XLOOKUP函数实现双向查找_ExcelXLOOKUP替代VLOOKUP+HLOOKUP的高级用法  太平年在哪个平台播出  深入理解Python对象引用与链表属性赋值  以下哪一项是古代兵书三十六计中的计谋  sublime怎么快速在浏览器中预览HTML_sublime配置View in Browser教程  《桃源记2》资源采集攻略  处理含命名空间的XML文件 Power Query中的高级技巧  德邦快递查询入口登录官网 德邦快递单号查询系统入口 

 2021-10-27

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.