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

Redis 淘汰策略 问题

前言


 相关系列

  • 《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.mrgr.cn/news/62249.html

相关文章:

  • 检测到联想鼠标自动调出运行窗口,鼠标自己作为键盘操作
  • 网盘资源查找工具---AI功能
  • 51单片机 和 STM32 的烧录方式和通信协议的区别
  • python学opencv|读取图像(三十三)阈值处理图像-限定像素
  • Redis 知识速览
  • C++语言的学习路线
  • leetcode hot100【LeetCode 230. 二叉搜索树中第K小的元素】java实现
  • DOM---鼠标事件类型(移入移出)
  • Java AQS Semaphore 源码
  • 天润融通突破AI客服局限,三大关键提升文本机器人问答效果
  • [SWPUCTF 2021 新生赛]easy_sql的write up
  • 虚拟机Ubuntu实现和宿主机之间的数据传输(只能复制粘贴,包过)
  • JVM系列之内存布局
  • RK3568平台(PWM篇)红外遥控适配
  • 高效构建仓库AGV管理系统:基于Python的路径规划与货架管理
  • 电动车进入电梯数据集、自行车进入电梯数据集 电动车进入电梯VOC数据标注数据集
  • 带你用Go实现二维码小游戏(中)
  • Java AQS 源码
  • 利用双指针法解题
  • RNN在训练中存在的问题
  • 大模型入门综述---从模型,训练,部署全方面认识大模型
  • 如何解决Matplotlib报错:none of the following families were found: SimHei
  • ReactNative Fabric渲染器和组件(5)
  • 统信UOS下启动图形界面应用工具monitor报JAVA相关错:An error has occurred. See the log file
  • 《高频电子线路》 —— 高频谐振功放
  • RK3568平台开发系列讲解(I2C篇)I2C 上拉电阻