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

Redis 中 TTL 的基本知识与禁用缓存键的实现策略(Java)

目录

  • 前言
  • 1. 基本知识
  • 2. Java代码

前言

🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF

单纯学习Redis可以看我前言的Java基本知识路线!!

对于Java的基本知识推荐阅读:

  1. java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)
  2. 【Java项目】实战CRUD的功能整理(持续更新)

在Java项目中,Redis配置了全局的TTL时间,后续想到可以通过设定单个key的TTL时间

在这里插入图片描述

1. 基本知识

先补充TTL的基本知识

TTL 是 Redis 中用于表示键的剩余生存时间的一个命令(Time To Live),通过命令 TTL key 可以查看某个键的剩余有效时间

返回值的含义如下:

  • 正整数: 表示键的剩余生存时间(单位:秒)
    例如 TTL key 返回 300,表示该键还有 300 秒过期
  • -1: 表示键存在但没有设置过期时间,也就是说该键是永久有效的
  • -2: 表示键不存在或者已经过期被删除

在这里插入图片描述

大致截图如下:

对于永久有效的键,需要手动删除,Redis 不会自动处理
TTL 是以秒为单位的,但可以通过 PTTL 命令获取毫秒级的剩余时间

2. Java代码

禁用单个 Redis 缓存键的实现

针对特定的缓存键(如 drag:cache:page),可以通过以下方式禁用:
策略: 为该键设置极短的 TTL,使其在创建后立即过期

if ("drag:cache:page".equals(name)) {
    if (cacheConfig != null) {
        cacheConfig = cacheConfig.entryTtl(Duration.ofMillis(1)); // 设置极短的过期时间
    }
    return super.createRedisCache(name, cacheConfig);
}

截图如下:

在这里插入图片描述

特别说明的是,此情况会失效:
Duration.ZERO 失败(TTL 为 -1)
在 Spring 的 RedisCacheConfiguration 中,Duration.ZERO 被解释为“永久有效”,导致 Redis 未对该键设置 TTL,因此返回 -1

~ Duration.ofMillis(1) 成功
当 TTL 被设置为极短时间(如 1 毫秒),Redis 会将该键立即标记为即将过期。客户端在短时间后访问该键时,Redis 会将其删除,因此相当于“禁用”了该键

总的来说:
Duration.ZERO 通常被认为是不需要过期时间的值,在大多数框架中会导致缓存项被设置为永久有效
使用非常短的 TTL(如 Duration.ofMillis(1))是一种有效实现“禁用”的方法

上述代码是结合实战进行推广:

以下是Demo思路:

  1. 设置极短 TTL
    推荐方式,通过设置 Duration.ofMillis(1) 实现禁用
    优点是直接在 Redis 中生效,且无需额外逻辑

  2. 手动删除键:缺点是需要额外的删除操作,增加复杂度
    使用 RedisTemplate 明确删除:

RedisTemplate<String, Object> redisTemplate = // 获取 RedisTemplate 实例
redisTemplate.delete("drag:cache:page");
  1. 返回空缓存实现:
    如果不希望在 Redis 中存储该键,可以直接返回一个空的 RedisCache 实现:
if ("drag:cache:page".equals(name)) {
    return new RedisCache(name, null, cacheConfig); // 返回空实现
}

http://www.kler.cn/a/506213.html

相关文章:

  • 使用jupyter notebook没有正常打开浏览器的几种情况解决
  • 【蓝桥杯】43687.赢球票
  • 从前端视角看设计模式之创建型模式篇
  • 如何使用PHP构建IoC容器,实现依赖注入!
  • mac下安装nvm的node版本管理工具
  • C语言:数据的存储
  • MR30分布式IO:贴标机产线的高效扩展与控制新纪元
  • Maven依赖管理项目构建工具
  • Linux安装Docker教程(详解)
  • 设计模式03:行为型设计模式之策略模式的使用情景及其基础Demo
  • 算法库里的heap算法,仿函数和模版进阶(续)
  • 【科技赋能未来】NDT2025第三届新能源数字科技大会全面启动!
  • Wireshark 使用教程:网络分析从入门到精通
  • 微信小程序:实现单选,多选,通过变量控制单选/多选
  • 人工智能之深度学习_[2]-PyTorch入门
  • 【Flink系列】4. Flink运行时架构
  • 低代码平台:技术复杂性的系统简化
  • 安装 fairseq 失败
  • leetcode刷题记录(四十八)——128. 最长连续序列
  • 【初阶数据结构】序列系统重构:顺序表
  • 易语言文字识别OCR
  • 美图脱掉“复古外衣”,在AI浪潮中蜕变
  • 45,【3】攻防世界supersqli
  • LeetCode 热题 100 | 矩阵
  • 晨辉面试抽签和评分管理系统之九:随机编排考生的分组(以教师资格考试面试为例)
  • Python爬虫:获取详情接口和关键词接口