大数据-47 Redis 缓存过期 淘汰删除策略 LRU LFU 基础概念

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (正在更新...)

章节内容

上一节我们完成了:

  • RDB的配置方式、触发方式
  • RDB的文件结构、优点、缺点
  • AOF的配置方式、触发方式
  • AOF的优点、缺点、瘦身方式
  • RDB + AOF 混合方式

Redis性能

官方数据是:

  • 读 110000次/s
  • 写 81000次/s
    长期使用,Key会不断地增加,Redis作为缓存使用,物理内存也会满。
    所以需要一个过期淘汰的策略

MaxMemory

不设置的情况:

  • Redis 的 Key 是固定的,不会增加。
  • Redis 作为 DB 使用,保证数据的完整性,不允许淘汰,可以做集群进行扩展。

淘汰策略:禁止驱逐(默认设置)

设置的情况

Redis 作为缓存使用,不断地增加Key,MaxMemory默认是0不进行限制。

在服务器上,保留1G给操作系统,剩下的就可以用作Redis的缓存。

通过修改 redis.conf 可以配置这个值:

shell 复制代码
maxmemory 1024mb
# 获取值
CONFIG GET maxmemory

设置MaxMemory后,当趋近于设置的值时,通过缓存的淘汰策略,就会从内存中删除

Expire

最常用的方式)在 Redis 中可以使用 expire 设置一个键的存活时间,过了这段时间,键会自动被删除

可以进行如下的测试:

shell 复制代码
./redis-cli
# 2秒失效
expire name 2 
get name
# 这种是永久有效
set name 123
ttl name

# 设置过期时间
expire name 10
ttl name 

删除策略

Redis 数据的删除有定时删除惰性删除主动删除 三种方式。'

Redis 目前采用的是:

  • 惰性删除
  • 主动删除

定时删除

在设置键的过期时间时,创建一个定时器,让定时器在指定时间时删除键。

惰性删除

在 key 被访问的时候发现过期了,就删除这条数据。

主动删除

我们打开 redis.conf 可以配置主动删除的策略:

shell 复制代码
# 默认是 no-enviction 不删除
maxmemory-policy allkeys-lru

主动删除: LRU

LRU(Least Recently Used)最近最少使用,算法根据数据的历史访问记录来进行淘汰数据。

其核心思想是:如果数据最近被访问过,那么将来被访问的概率也会更高

最常见的实现是使用一个链表来保存数据:

  • 新数据插入到链表头部
  • 每当缓存命中的时候,则将数据移动到链表的头部
  • 链表满了的时候,将链表尾部数据删除
  • 在Java中可以使用LinkedHashMap来实现LRU

Redis-LRU

在服务器中保存了 LRU 计数器:server.lrulock,会定时更新,这个值是根据 server.unixtime 来计算的。

LRU的数据淘汰机制是:在数据集中随机挑选几个值,取出其中LRU最大的淘汰掉。

  • volatile-lru:从设置过期时间的数据集中挑选最少使用的淘汰
  • allkeys-lru:从数据集中挑选最近最少使用的数据淘汰

LFU

LFU(Least Frequency used)最不经常使用,如果一个数据在最近一段时间内使用次数很少,那么将来一段时间内被使用的可能性也很小。

  • volatile-lfu 同LRU
  • allkeys-lfu 同LRU
  • volatile-random 从设置过期时间的数据集中随机淘汰数据
  • allkeys-random 从数据集中任意选择进行淘汰

TTL

  • volatile-ttl 从设置过期时间的数据里,选择快要过期的数据淘汰

noenviction

禁止驱逐数据,不淘汰数据(默认的)

淘汰策略选择

  • allkeys-lru 在不确定时一般采用的策略 冷热数据交换
  • volatile-lruallkeys-lru性能要差,因为要查过期时间
  • allkeys-random 希望请求符合平均分布(每个值被访问的概率差不多)
  • 自己控制 volatile-ttl
相关推荐
RFID固定资产管理系统3 分钟前
公司RFID管理系统揭秘
大数据·python
TDengine (老段)13 分钟前
TDengine Go 与 Rust 连接器 — 高性能异步访问
大数据·数据库·物联网·golang·rust·时序数据库·tdengine
湘美书院--湘美谈教育36 分钟前
湘美谈教育互联网逻辑:AI时代的社会学猜想
大数据·人工智能·深度学习·机器学习·生活
东方佑38 分钟前
MA-RMSNorm:打破“缩放换智能”的魔咒,大模型归一化的一次范式革命!
数据库·人工智能·计算机视觉
云和恩墨1 小时前
「云帆计划·长沙站」活动成功举办,云和恩墨与紫薇垣和湖南金悦科技分别签约并授牌,本地伙伴生态建设加速
数据库·科技
易观Analysys1 小时前
中国AI健康管理应用发展报告2026
大数据·人工智能
阿里技术2 小时前
面向复杂业务场景的智能分析 Skills 架构设计与演进实践
大数据
千维百策6662 小时前
如何管理错误预算:提升服务可靠性与 SLO 达成率的实践经验
服务器·网络·数据库
科技圈快迅2 小时前
在机场与高铁站:智能服务机器人正在深度对接业务系统,实现从信息孤岛到移动服务窗口的转变
大数据·人工智能·机器人
牛奶咖啡133 小时前
大数据Hadoop运维应用实践——HIVE与Hadoop实现整合_Hive的配置安装与使用
大数据·hive·hive的配置与安装·metastore服务的配置·hiveserver2服务配置·hive的常用sql操作·beeline的使用