元月's blog 元月's blog
首页
  • 基础
  • 并发编程
  • JVM
  • Spring
  • Redis篇
  • Nginx篇
  • Kafka篇
  • Otter篇
  • Shardingsphere篇
  • 设计模式
  • MySQL
  • Oracle
  • 基础
  • 操作系统
  • 网络
  • 数据结构
  • 技术文档
  • Git常用命令
  • GitHub技巧
  • 博客搭建
  • 开发工具
更多

元月

临渊羡鱼,不如退而结网
首页
  • 基础
  • 并发编程
  • JVM
  • Spring
  • Redis篇
  • Nginx篇
  • Kafka篇
  • Otter篇
  • Shardingsphere篇
  • 设计模式
  • MySQL
  • Oracle
  • 基础
  • 操作系统
  • 网络
  • 数据结构
  • 技术文档
  • Git常用命令
  • GitHub技巧
  • 博客搭建
  • 开发工具
更多
  • Redis

    • Redis安装
    • Redis持久化+灾难恢复方案
    • Redis常见数据类型和使用场景
    • Redis数据结构(一)Hyperloglog的实现原理
    • Redis数据结构(二)Bitmap位图的实现原理
    • Redis高可用
    • Redis缓存过期策略以及淘汰策略是什么?
      • 一、Redis的过期删除策略
        • 1.1、定期删除策略
        • 1.2、惰性删除策略
        • 1.3、客户端删除策略
      • 二、Redis的缓存淘汰策略
    • 缓存穿透、缓存击穿和缓存雪崩的解决方案
    • Redis分布式锁的演变历史
    • Redis的集成与应用
  • Nginx

  • Kafka

  • Shardingsphere

  • Otter

  • nexus

  • 中间件
  • Redis
元月
2022-06-16
目录

Redis缓存过期策略以及淘汰策略是什么?

# 一、Redis的过期删除策略

Redis 是一种支持过期数据的键值对存储系统,它的过期策略如下:

# 1.1、定期删除策略

Redis 默认每隔 100ms 就随机抽取一些设置了过期时间的键,并检查它们是否过期,如果过期就将其删除。默认情况下,Redis 每秒执行 10 次此操作。可以通过配置文件中的 hz 参数来调整此操作的执行频率。

# 1.2、惰性删除策略

当一个过期键被访问时,Redis 会检查它是否过期,如果过期就将其删除。这个检查是惰性的,也就是说,Redis 只有在有需要时才会执行这个检查。因此,如果一个过期键一直没有被访问,那么它就不会被删除。这种策略可以减少 Redis 的 CPU 使用率,但可能会导致过期键的存留时间比较长。

# 1.3、客户端删除策略

当一个客户端对一个过期键进行操作时,Redis 会检查它是否过期,如果过期就将其删除。这种策略可以确保过期键及时被删除,但需要客户端在访问过期键之前进行过期检查。

需要注意的是,Redis 的过期策略并不是完全准确的。由于定期删除策略是随机抽取键进行删除,因此可能会出现某些过期键没有被及时删除的情况。而惰性删除策略和客户端删除策略都需要等待键被访问才能进行删除,如果某些键一直没有被访问,那么它们可能会一直存在,直到内存不足为止。因此,在设计应用程序时,需要考虑到这些潜在的问题,并采取相应的措施来处理。

# 二、Redis的缓存淘汰策略

Redis 是一种内存缓存系统,由于内存有限,当 Redis 的内存空间不足时,就需要采用缓存淘汰策略,将一些缓存对象删除以腾出空间。Redis 支持以下几种缓存淘汰算法:

  1. LRU(Least Recently Used):Redis 会根据键最近被访问的时间,删除最近最少使用的键。
  2. LFU(Least Frequently Used):Redis 会根据键被访问的次数,删除访问次数最少的键。
  3. FIFO(First In, First Out):Redis 会删除最早被添加到缓存中的键。
  4. Random(随机):Redis 会随机选择一个键进行删除。

可以通过配置文件中的 maxmemory-policy 参数开启指定策略,需要注意的是,当 Redis 的内存空间不足时,缓存淘汰策略并不是立即生效的。当一个键过期或者被修改时,Redis 会检查内存空间是否足够,如果不足则会触发缓存淘汰策略,删除一些键以腾出空间。

淘汰策略名称 策略含义
noeviction 默认策略,不淘汰数据;大部分写命令都将返回错误(DEL等少数除外)
volatile-lfu 从设置了过期时间的数据中根据 LFU 算法挑选数据淘汰(4.0及以上版本可用)
volatile-lru 从设置了过期时间的数据中根据 LRU 算法挑选数据淘汰
volatile-random 从设置了过期时间的数据中随机挑选数据淘汰从设置了过期时间的数据中根据 LRU 算法挑选数据淘汰
volatile-ttl 从设置了过期时间的数据中,挑选越早过期的数据进行删除
allkeys-lru 从所有数据中根据 LRU 算法挑选数据淘汰
allkeys-random 从所有数据中随机挑选数据淘汰
allkeys-lfu 从所有数据中根据 LFU 算法挑选数据淘汰(4.0及以上版本可用)
#Redis
Redis高可用
缓存穿透、缓存击穿和缓存雪崩的解决方案

← Redis高可用 缓存穿透、缓存击穿和缓存雪崩的解决方案→

最近更新
01
otter二次开发-支持按目标端主键索引Load数据
08-03
02
mvnw简介
06-21
03
gor流量复制工具
06-03
更多文章>
Theme by Vdoing | Copyright © 2022-2024 元月 | 粤ICP备2022071877号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式