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

embedded/2025/1/21 3:41:36/

目录

  • 前言
  • 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,使其在创建后立即过期

java">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 明确删除:

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

http://www.ppmy.cn/embedded/155666.html

相关文章

PiliPalaX ( 第三方安卓哔哩哔哩)

PiliPalaX 是一款哔哩哔哩第三方客户端。使用 Flutter 开发&#xff0c;基于PiliPala原版基础上创作出来的X升级版&#xff0c;目前支持Android、IOS客户端。 应用特色 目前着重移动端(Android、iOS)和Pad端&#xff0c;暂时没有适配桌面端、手表端等 https://pan.quark.cn/s/…

第九章:演示文稿软件PPT

文章目录&#xff1a; 一&#xff1a;界面 1.介绍 2.选项卡 2.1 开始 2.2 插入 2.3 设计 2.4 切换 2.5 动画 2.6 放映 2.7 审阅 2.8 视图 2.9 音频工具 2.10 视频工具 二&#xff1a;基础 三&#xff1a;设计 1.静态 2.动态 四&#xff1a;放映 一&#xff1…

软考信安22~网站安全需求分析与安全保护工程

1、网站安全威胁与需求分析 1.1、网站安全概念 网站安全主要是有关网站的机密性、完整性、可用性及可控性。 网站的机密性是指网站信息及相关数据不被授权查看或泄露。 网站的完整性是指网站的信息及数据不能非授权修改,网站服务不被劫持。 网站的可用性是指网站可以待续…

基于 Spring Boot、Vue 实现的调问开源问卷系统

是一款简单、高效、成熟、稳定、专业的开源问卷系统&#xff0c;自2012年启动至今经过9年的积累&#xff0c;已经形成一套完善的基于 JAVA WEB 的开源问卷表单解决方案。 &#x1f389;&#x1f389;&#x1f389; 企业版 全新的 企业版 已经发布&#xff0c;前后端分别采用 …

PyTorch 神经协同过滤 (NCF) 推荐系统教程

目录 教程概述1. 神经协同过滤模型概述NCF 模型的主要组成部分&#xff1a; 2. 数据加载与预处理3. 定义神经协同过滤模型4. 训练模型5. 模型评估6. 推荐物品7. 完整示例8. 总结 在本教程中&#xff0c;我们将使用 PyTorch 实现一个神经协同过滤&#xff08;Neural Collaborat…

NavVis手持激光扫描帮助舍弗勒快速打造“数字孪生”工厂-沪敖3D

在全球拥有近100家工厂的舍弗勒&#xff0c;从2016年开启数字化运营进程&#xff0c;而当前制造、库存、劳动力和物流的数字化&#xff0c;已无法支持其进一步简化工作流程&#xff0c;亟需数字化物理制造环境&#xff0c;打造“数字孪生”工厂。 NavVis为其提供NavVis VLX 3…

计算机网络 (45)动态主机配置协议DHCP

前言 计算机网络中的动态主机配置协议&#xff08;DHCP&#xff0c;Dynamic Host Configuration Protocol&#xff09;是一种网络管理协议&#xff0c;主要用于自动分配IP地址和其他网络配置参数给连接到网络的设备。 一、基本概念 定义&#xff1a;DHCP是一种网络协议&#xf…

CSS 网络安全字体

适用于 HTML 和 CSS 的最佳 Web 安全字体 下面列出了适用于 HTM L和 CSS 的最佳 Web 安全字体&#xff1a; Arial (sans-serif)Verdana (sans-serif)Helvetica (sans-serif)Tahoma (sans-serif)Trebuchet MS (sans-serif)Times New Roman (serif)Georgia (serif)Garamond (se…