【redis】 LRU 和 LFU 算法

ops/2024/10/19 21:37:00/

1、简介

  • Redis 中的 LRU(Least Recently Used)和 LFU(Least Frequently Used)算法是用于决定在内存空间不足时,哪些键(key)应该被删除以释放空间的策略。
  • 这两种算法都试图通过跟踪键的使用情况来优化缓存的性能。

2、LRU  算法

  • LRU 是一种常用的页面置换算法,它选择最久未使用的页面予以淘汰。
  • 在 Redis 中,LRU 策略用于当内存达到 maxmemory 限制时,选择哪些键进行删除。然而,Redis 的 LRU 实现并不是严格意义上的 LRU,因为它采用了近似 LRU 算法,以节省内存和提高性能。
  • Redis 的近似 LRU 算法通过随机采样一部分键,并基于这些键的访问时间来决定哪些键最久未使用。具体来说,Redis 会为每个键维护一个访问时间戳,当需要淘汰键时,它会随机选择一部分键,并比较这些键的访问时间戳,淘汰最久未使用的键。

3、 LFU 算法

  • LFU 是一种基于访问频率的页面置换算法,它选择访问频率最低的页面予以淘汰。在 Redis 4.0 及更高版本中,引入了 LFU 淘汰策略。
  • LFU 策略跟踪每个键的访问频率,并据此决定哪些键应该被删除。与 LRU 不同,LFU 不依赖于时间戳,而是根据键的访问次数来判断其“新鲜度”。
  • 在 Redis 中,LFU 使用一个 8 位的计数器来记录每个键的访问频率,每当键被访问时,计数器就会增加。当需要淘汰键时,Redis 会选择访问频率最低的键进行删除。
  • 为了更精确地跟踪访问频率,Redis 的 LFU 计数器采用了衰减机制。如果一个键在一段时间内没有被访问,它的计数器值会逐渐减小,从而反映出该键的“过时”程度。
  • 这种机制有助于 Redis 在淘汰键时更好地平衡新数据和旧数据。

4、LRU与LFU算法的区别

  • LRU(Least Recently Used):最近最少使用算法,认为长时间不使用的数据在未来被使用的可能性也很小。Redis中LRU算法的实现采用了随机抽样的方式,提升了性能。
  • LFU(Least Frequently Used):最不常用算法,根据数据的访问频率来决定哪些数据应当被淘汰。LFU算法更加重视元素的访问频率,而非最近一次访问时间。

5、配置和使用

在 Redis 配置文件中(通常是 redis.conf),你可以通过 maxmemory-policy 选项来设置淘汰策略。对于 LRU 和 LFU 策略,你可以分别使用以下值:

  • volatile-lru:对设置了过期时间的数据使用 LRU 算法淘汰。
  • allkeys-lru:对所有数据使用 LRU 算法淘汰。
  • volatile-lfu:对设置了过期时间的数据使用 LFU 算法淘汰。
  • allkeys-lfu:对所有数据使用 LFU 算法淘汰。

http://www.ppmy.cn/ops/56310.html

相关文章

uniapp中微信小程序——蓝牙连接并通信

蓝牙连接并与设备进行通信 已下是我在实现蓝牙功能中使用到的所有Api,当然微信小程序中还有很多我没有用到的Api,如果下面没有满足你需求的Api可以去官方文档查看。 初始化蓝牙模块 openBluetoothAdapter 开始搜寻附近的蓝牙外围设备。 startBluetoot…

仙人掌中的SNMP检测不到服务器

登录有问题的服务器1.检测snmp localhost:~ # ps -ef|grep snmp root 55180 1 0 08:37 ? 00:00:08 /usr/sbin/snmpd -r -A -LF n /var/log/net-snmpd.log -p /var/run/snmpd.pid root 58436 53989 0 09:44 pts/0 00:00:00 grep --colorauto snmp2.检测…

设计模式之Command

一、Command模式基本介绍 Command模式,也称为行动模式或事务模式,用于将请求封装为一个对象,从而实现行为的解耦和灵活性。 这种模式特别适用于需要记录、撤销或重做操作的情况,因为它允许系统在运行时动态地处理请求。 定义与结…

设计模式探索:适配器模式

1. 适配器模式介绍 1.1 适配器模式介绍 适配器模式(adapter pattern)的原始定义是:将一个类的接口转换为客户期望的另一个接口,适配器可以让不兼容的两个类一起协同工作。 适配器模式的主要作用是把原本不兼容的接口&#xff0c…

实现桌面动态壁纸(二)

目录 前言 一、关于 WorkerW 工作区窗口 二、关于窗口关系 2.1 窗口以及窗口隶属关系 2.2 桌面管理层窗口组分简析 2.3 厘清两个概念的区别 2.4 关于设置父窗口 三、编写代码以供在 Vista 上实现 3.1 方法二:子类化并自绘窗口背景 四、初步分析桌面管理层…

雷电模拟如何换ip地址 手机模拟器ip修改方法

很多游戏爱好者会使用雷电模拟器多开窗口,若模拟器窗口开多了,IP地址是一样的就怕有限制,很容易被游戏后台检测到,从而产生被封号的风险。 那么怎么更换自己电脑手机模拟器IP地址呢,今天就教大家一个修改模拟器IP地址的…

绝区陆--大语言模型的幻觉问题是如何推动科学创新

介绍 大型语言模型 (LLM)(例如 GPT-4、LLaMA-2、PaLM-2、Claude-2 等)已展示出为各种应用生成类似人类文本的出色能力。然而,LLM 的一个鲜为人知的方面是它们倾向于“产生幻觉”或生成不正确或没有根据的事实陈述。我不认为这仅仅是一个限制…

Oracle数据库自带的内置表和视图、常用内部视图

文章目录 一.Oracle数据库自带的内置表和视图1.dba_开头表2.user_开头表3.v$开头表4.all_开头表5.session_开头表6.index_开头表 三.按组分的几组重要的性能视图1.System的over view2.某个session的当前情况3.SQL的情况4.Latch/lock/ENQUEUE5.IO方面的 分类类别关系群集、表、视…