当前位置: 首页 > news >正文

Redis 淘汰策略 问题

前言


 相关系列

  • 《Redis & 目录》(持续更新)
  • 《Redis & 淘汰策略 & 源码》(学习过程/多有漏误/仅作参考/不再更新)
  • 《Redis & 淘汰策略 & 总结》(学习总结/最新最准/持续更新)
  • 《Redis & 淘汰策略 & 问题》(学习解答/持续更新)
     
     

在内存耗尽的情况访问Redis会发生什么?


    如果是读指令会正常返回,而如果是写指令则会根据实际的淘汰策略抛出异常或删除符合条件的部分数据以空出内存空间。
 
 

Redis的淘汰策略有哪些?


    Redis淘汰策略用于在内部不足时选定部分数据删除以空出内存空间。

  • eviction @ 逐出
        no-eviction:当内存不足以/不允许写入新数据时,写操作会报错(默认,但不推荐);
  • lru @ Least Recently Used @ 最近最少使用
        allkeys-lru:当内存不足以/不允许写入新数据时,删除最近最少使用的数据(常用);
        volatile-lru:当内存不足以/不允许写入新数据时,删除最近最少使用的期限数据,无期限数据时会报错(常用);
  • lfu @ Least Frequently Used @ 最少使用
        allkeys-lfu:当内存不足以/不允许写入新数据时,删除最少使用的数据;
        volatile-lfu:当内存不足以/不允许写入新数据时,删除最少使用的期限数据,无期限数据时会报错;
  • random @ 随机
        allkeys-random:当内存不足以/不允许写入新数据时,删除随机数据;
        volatile-random:当内存不足以/不允许写入新数据时,删除随机期限数据,无期限数据时会报错;
  • ttl @ Time To Live @ 存活时间
        volatile-ttl:当内存不足以/不允许写入新数据时,删除最快过期的期限数据,无期限数据时会报错(常用)。
     
     

Redis的LRU/LFU淘汰策略是精确实现吗?


    Redis对LRU/LFU类型的淘汰策略采用的是近似实现,因此统计/对比所有目标数据的最近/完全使用次数/频率是非常耗费性能的行为…近似实现的主要思想具体如下:

  • 最近/长期使用频率的模拟:Redis并不会对数据的最近/长期使用频率进行精确计算,而是会使用最近访问时间/概率访问总数来进行模拟。Redis会为数据的每次访问记录时间,而LRU淘汰策略便会使用最近访问时间来作为最近使用频率来进行比较。最近访问时间最早的数据会被认为最近使用频率最小,因此该内部数据便会被最终淘汰。此外Redis还会“概率”增长中数据的访问总数,从而便可以在不破坏整体增长趋势的情况下通过避免增长来提升整体性能,并在LFU淘汰策略中充当长期使用频率来进行比较。Redis还考虑了时间衰减因素对长期使用频率的影响,因为数据的时间跨度并不相同, 并且某些数据可能只在早期被频繁使用,而在这之后就被长期闲置。很显然这种数据即使长期使用频率较高也更适合被删除,因此为了令最近使用总数可以占据更高的频率比重Redis在“概率”增长访问总数的同时还会根据当前时间与最近访问时间的差值大小来对应的减少访问总数。
  • 局部比较代替全量比较:为了最大程度的提升性能/降低开销,Redis不会去比较全量数据的最近/长期使用频率,而只会随机抽取{maxmemory-samples}配置项数量的数据来进行局部比较,并将最近/长期使用频率最小的数据淘汰。
http://www.lryc.cn/news/470480.html

相关文章:

  • 技术成神之路:设计模式(二十二)命令模式
  • facebook账号类型有哪些?
  • Flutter鸿蒙next 中如何实现 WebView【跳、显、适、反】等一些基础问题
  • 机器视觉:9点标定的原理与实现
  • 《深度学习》 了解YOLO基本知识
  • 什么是Kubernetes?K8s基础与工作原理
  • HTML5新增属性
  • 软件开发术语(E开头)---持续更新
  • 多机器人编队避障算法(1)
  • 【网站项目】SpringBoot401超市收银系统
  • KD树详解:多维数据高效搜索的利器
  • 从裸机到70B大模型2:基础设施设置与脚本
  • shodan4,挂黑网站查找,弱口令网站搜索
  • spring boot 整合Knife4j
  • 攻防世界的新手web题解
  • 【国潮来袭】华为原生鸿蒙 HarmonyOS NEXT(5.0)正式发布:鸿蒙诞生以来最大升级,碰一碰、小艺圈选重磅上线
  • pytest 单元框架里,前置条件
  • 数字IC后端实现 | Innovus各个阶段常用命令汇总
  • MySQL全文索引检索中文
  • pikachu靶场-Cross-Site Scripting(XSS)
  • 在数据库访问中,使用localhost、127.0.0.1和IP地址有什么差异
  • C语言 | Leetcode C语言题解之第513题找树左下角的值
  • 人工智能:改变未来生活与工作的无尽可能
  • 讲一讲 kafka 的 ack 的三种机制?
  • 若依框架部署到服务器后头像资源访问404
  • 纯GO语言开发RTSP流媒体服务器-RTSP推流直播、本地保存录像、录像回放、http-flv及hls协议分发
  • el-table相关的功能实现
  • 衡石分析平台系统分析人员手册-展示类控件创建富文本攻略
  • 为什么在网络中不能直接传输数据
  • javascript实现aes算法(支持微信小程序)