Redis缓存淘汰策略

Redis缓存淘汰策略常用缓存策略常用的缓存淘汰策略有以下先进先出算法 FIFO LeastFrequen LFU 淘汰一定时期内被访问次数最少的页面 以次数作为参考 LeastRecentl LRU 淘汰最长时间未被使用的页面 以时间作为参考这些算法在不同层次的缓存上执行时拥有不同的效率和代价 需根据具体场合选择最合适的一种 FIFOFIFO FirstinFirst 先进先出 在 FIFOCache 设计中 核心原则就是 如果一个数据最先进入缓存中

常用缓存策略

常用的缓存淘汰策略有以下

  • 先进先出算法(FIFO)
  • Least Frequently Used(LFU)
    淘汰一定时期内被访问次数最少的页面,以次数作为参考
  • Least Recently Used(LRU)
    淘汰最长时间未被使用的页面,以时间作为参考

这些算法在不同层次的缓存上执行时拥有不同的效率和代价,需根据具体场合选择最合适的一种。

FIFO

FIFO(First in First out),先进先出。在FIFO Cache设计中,核心原则就是:如果一个数据最先进入缓存中,则应该最早淘汰掉。

LFU

 

Redis缓存淘汰策略

 

LRU

 

Redis缓存淘汰策略

 

Two queues(2Q)

2Q算法有两个缓存队列,一个是FIFO队列,一个是LRU队列。当数据第一次访问时,2Q算法将数据缓存在FIFO队列里面,当数据第二次被访问时,则将数据从FIFO队列移到LRU队列里面,两个队列各自按照自己的方法淘汰数据。详细实现如下:

 

Redis缓存淘汰策略

 

  1. 新访问的数据插入到FIFO队列;
  2. 如果数据在FIFO队列中一直没有被再次访问,则最终按照FIFO规则淘汰;
  3. 如果数据在FIFO队列中被再次访问,则将数据移到LRU队列头部;
  4. 如果数据在LRU队列再次被访问,则将数据移到LRU队列头部;
  5. LRU队列淘汰末尾的数据。

周期性的批量操作,会立即淘汰LRU队列中的大量数据,导致缓存命中率大幅度下降。而APP常规操作中,有大量偶发批量操作,比如:进入页面后立即返回,就是很典型的一种。

所以LRU算法并不是一个非常好的选择。

转自:https://www.cnblogs.com/zhangfengshi/p/11466263.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/178722.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午4:38
下一篇 2026年3月26日 下午4:38


相关推荐

  • oracle中的rownum详解

    oracle中的rownum详解1.概述rownum是Oracle引入的虚列。在物理上这个虚列并不存在,只是在查询时才构造出来。伪列通常是自由分配的,用户无法执行修改等操作。2.特点关于rownum有以下主要特点:1)row

    2022年7月2日
    24
  • 数据库置疑什么原因_sql2008数据库置疑

    数据库置疑什么原因_sql2008数据库置疑在MSSQLSERVER中一直有这样的问题,SQLSERVER的状态”置疑”,我们先来分析一下SQLSERVER数据库”置疑”的原因:1.错误的删除日志;2.硬件(HD)损坏,造成日志和数据文件写错误;3.硬盘的空间不够,比如日志文件过大;解决办法:这是最简单的办法是有数据库的全备份,然后恢复即可.步骤:1.删除原始的数据库:USEMASTERGODROPDATABASEDB_SUEPE…

    2022年8月20日
    9
  • gamma校正什么意思_串联滞后校正对系统性能的影响

    gamma校正什么意思_串联滞后校正对系统性能的影响【Gamma的由来】首先,要区分照度和亮度,照度是一个客观的量,亮度是一个主观的量,不同的人看相同照度的物体所感受到的亮度是不一样的。对于照度线性变化的物体,人眼感受到的亮度不是线性的。人眼对于低照度的物体更敏感,这意味着对于照度为2、3、4的三个物体,人眼能够区分,而对于照度为222、223、224的三个物体,人眼不能区分。其次,我们存储颜色的空间是有限的,常用的RGBA32格式,每个颜色通道只有8位,最多能表示256种照度,而现实世界中的照度远超256。基于人眼对照度的感知特点,我们不能线性的去

    2026年2月15日
    4
  • 通过reduce函数实现数组求和_js数组求和的方法

    通过reduce函数实现数组求和_js数组求和的方法对于实现数组求和,我们常用的思路是通过for、while,对数组进行迭代,依次将他们的值加起来,下面列举常用的两种方法第一种:vararr=[1,2,3,4,5,6];Array.prototype.sum=function(){varsumResult=0;for(vari=0;i<this.lengt…

    2022年10月2日
    2
  • mysql text mediumtext_MySQL修改字段长度

    mysql text mediumtext_MySQL修改字段长度一、数字类型类型范围说明Char(N)[binary]N=1~255个字元binary:分辨大小写固定长度std_namecahr(32)notnullVarChar(N)[binary]N=1~255个字元binary:分辨大小写可变长度std_addressvarchar(256)TinyBlob最大长度255个…

    2022年8月13日
    13
  • 从U盘安装centos7(史上最简单的终极解决方案)

    从U盘安装centos7(史上最简单的终极解决方案)1、下载最新版本的centos(目前是centos7.6)https://www.centos.org/download/由于我是安装服务器,所以选择了MinimalISO(只有900多MB)2、制作Centos安装盘(准备一个空白的1GB以上的U盘)2.1.安装UltraISO2.2.安装完成后点…

    2022年5月20日
    53

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号