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

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); // 返回空实现
}

相关文章:

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

目录 前言1. 基本知识2. Java代码 前言 &#x1f91f; 找工作&#xff0c;来万码优才&#xff1a;&#x1f449; #小程序://万码优才/r6rqmzDaXpYkJZF 单纯学习Redis可以看我前言的Java基本知识路线&#xff01;&#xff01; 对于Java的基本知识推荐阅读&#xff1a; java框架…...

SpringMvc解决跨域问题的源码汇总。

看本文章前&#xff0c;需了解跨域的缘由。 其次&#xff0c;了解RequestMapping的基础原理 最后我们来解析SpringMvc是如何处理跨域问题的。 跨域信息配置 SpringMvc分为全局级别和局部级别两种&#xff0c;全局级别就是任何跨域请求都起作用。 全局级别 全局级别就是在配…...

25.1.17学习内容

B - 迷宫 Description 给定一个 NM 方格的迷宫&#xff0c;迷宫里有 T 处障碍&#xff0c;障碍处不可通过。 在迷宫中移动有上下左右四种方式&#xff0c;每次只能移动一个方格。数据保证起点上没有障碍。 给定起点坐标和终点坐标&#xff0c;每个方格最多经过一次&#xf…...

【开源免费】基于SpringBoot+Vue.JS欢迪迈手机商城(JAVA毕业设计)

本文项目编号 T 141 &#xff0c;文末自助获取源码 \color{red}{T141&#xff0c;文末自助获取源码} T141&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...

Qt之文件系统操作和读写

Qt creator 6.80 MinGw 64bit 文本文件是指以纯文本格式存储的文件&#xff0c;如cpp和hpp文件。XML文件和JSON文件也是文本文件&#xff0c;只是使用了特定的标记符号定义文本的含义&#xff0c;读取这种文本文件需要先对内容解析再显示。 qt提供了两种读写文本文件的方法。…...

合合信息名片全能王上架原生鸿蒙应用市场,成为首批数字名片类应用

长期以来&#xff0c;名片都是企业商务沟通的重要工具。随着企业数字化转型&#xff0c;相较于传统的纸质名片&#xff0c;数字名片对于企业成员拓展业务、获取商机、提升企业形象等方面发挥着重要作用。近期&#xff0c;合合信息旗下名片全能王正式上线原生鸿蒙应用市场&#…...

万字长文介绍ARINC 653,以及在综合模块化航空电子设备(IMA)中的作用

文章目录 一、引言二、ARINC 653背景三、整体系统架构四、应用/执行&#xff08;APEX&#xff09;接口五、ARINC 653 RTOS内部机制六、健康监测功能七、软件应用八、ARINC 653现状九、总结 一、引言 在现代航空领域&#xff0c;综合模块化航空电子设备&#xff08;IMA&#xf…...

jenkins-node节点配置

一.简述&#xff1a; Jenkins有一个很强大的功能&#xff1a; 即&#xff1a;支持分布式构建(jenkins配置中叫节点(node),也被称为slave)。分布式构建通常是用来吸收额外的负载。通过动态添加额外的机器应对构建作业中的高峰期&#xff0c;或在特定操作系统或环境运行特定的构建…...

【Flink系列】5. DataStream API

5. DataStream API DataStream API是Flink的核心层API。一个Flink程序&#xff0c;其实就是对DataStream的各种转换。具体来说&#xff0c;代码基本上都由以下几部分构成&#xff1a; 5.1 执行环境&#xff08;Execution Environment&#xff09; Flink程序可以在各种上下文…...

【tailscale 和 ssh】当服务器建立好节点,但通过客户端无法通过 ssh 连接

背景 当服务器建立好节点&#xff0c;一切显示正常但通过客户端无法通过 vs code 中的 ssh 连接到服务器 问题解决 因为服务器是重装过的&#xff0c;所以忘记在服务器上下载 ssh 了。。。安装完成并启动 SSH 服务后便可正常连接&#xff01; sudo apt update sudo apt in…...

TDengine 做 Apache SuperSet 数据源

‌Apache Superset‌ 是一个现代的企业级商业智能&#xff08;BI&#xff09;Web 应用程序&#xff0c;主要用于数据探索和可视化。它由 Apache 软件基金会支持&#xff0c;是一个开源项目&#xff0c;它拥有活跃的社区和丰富的生态系统。Apache Superset 提供了直观的用户界面…...

PCL 新增自定义点类型【2025最新版】

目录 一、自定义点类型1、前言2、定义方法3、代码示例二、合并现有类型三、点云按时间渲染1、CloudCompare渲染2、PCL渲染博客长期更新,本文最近更新时间为:2025年1月18日。 一、自定义点类型 1、前言 PCL库自身定义了很多点云类型,但是在使用的时候时如果要使用自己定义的…...

【记录52】el-table-column 添加fixed属性 滚动条无法滑动

问题&#xff1a; el-table-column 添加fixed属性 滚动条无法滑动 使用element UI组件&#xff0c;用到el-table的el-table-column的fixed属性时&#xff0c;当滚动条长度小于固定列时&#xff0c;滚动条无法通过鼠标去点击滑动操作 原因 fixed是用来固定列的属性&#xff0c;其…...

华为OD机试E卷 ---最大值

一、题目描述 给定一组整数(非负)&#xff0c;重排顺序后输出一个最大的整数。 二、示例1 用例1 输入 10 9输出 910说明:输出结果可能非常大&#xff0c;所以你需要返回一个 字符串只而不是整数。 三、输入描述 数字组合 四、输出描述 最大的整数 五、解题思路 字符…...

服务器迁移MySQL

由于公司原有的服务器不再使用&#xff0c;需要将老的服务器上的MySQL迁移到新的服务器上&#xff0c;因此需要对数据进行备份迁移&#xff0c;前提是两台服务器已安装相同版本的MySQL&#xff0c;这里就不再讲解MySQL的安装步骤了&#xff0c;可以安装包、可以在线下载、可以容…...

.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上)

系列文章目录 1、.Net Core微服务入门系列&#xff08;一&#xff09;——项目搭建 2、.Net Core微服务入门全纪录&#xff08;二&#xff09;——Consul-服务注册与发现&#xff08;上&#xff09; 3、.Net Core微服务入门全纪录&#xff08;三&#xff09;——Consul-服务注…...

【Linux系统】分区挂载

我们能够根据一个 inode 号在指定分区寻找目标文件的 struct inode&#xff0c;也能根据目录文件的内容&#xff0c;通过映射关系&#xff0c;找指定的 inode&#xff0c;可是&#xff0c;现在有个问题&#xff1a; 问题&#xff1a;inode 是不能跨分区使用的&#xff01;Linu…...

进阶——十六届蓝桥杯嵌入式熟练度练习(按键+LCD)

高亮&#xff08;一&#xff09; 声明 char buf[21];unsigned char upled0x04;uint8_t key_val;uint8_t key_down,key_up,key_old;uint32_t key_time;uint8_t key_temp,key_flag;uint8_t line_flag; 按键代码 void key_proc(void) { key_valkey_scan();key_downkey_val&…...

简单介绍JSONStream的使用

地址 作用 这个模块是根据需要筛选出json数据中自己所需要的数据 使用 var JSONStream require("JSONStream"); var parse require("fast-json-parse"); var fs require("fs");fs.createReadStream("./time.json").pipe(JSONSt…...

LTX-Video 高效视频生成模型,一键处理图片文字

LTX-Video 是由 Lightricks 在 2024 年开发的一种视频生成模型&#xff0c;这种模型采用了 transformer 和 Video-VAE 技术&#xff0c;能够高效生成高分辨率视频。此外&#xff0c;LTX-Video 支持多种视频生成方式&#xff0c;包括从文本到视频和从图像到视频。 教程链接&…...

AUTOSAR从入门到精通专栏总目录

AUTOSAR通过分层、模块化和封装的特性&#xff0c;革命性地改变了汽车电子软件开发。它简化了软硬件接口&#xff0c;提高了软件复用性&#xff0c;降低了开发成本和周期。随着 AUTOSAR 在汽车电子系统开发领域的广泛应用&#xff0c;对其深入理解和熟练掌握已成为汽车电子软件…...

Windows环境本地配置pyspark环境详细教程

目录 一、背景简记二、本地单机spark环境配置详细步骤第一步&#xff1a;python环境安装第二步&#xff1a;安装jdk及配置环境变量安装包下载安装环境变量配置 第三步&#xff1a;安装Spark安装包下载安装配置环境变量 第四步&#xff1a;安装hadoop安装包下载安装配置环境变量…...

第8篇:从入门到精通:掌握Python异常处理

第8篇&#xff1a;异常处理 内容简介 本篇文章将深入探讨Python中的异常处理机制。您将学习异常的基本概念与类型&#xff0c;掌握使用try-except块处理异常的方法&#xff0c;了解finally语句的作用&#xff0c;以及如何抛出和定义自定义异常。通过丰富的代码示例&#xff0…...

聚铭网络6款产品入选CCIA《网络安全专用产品指南》

近日&#xff0c;中国网络安全产业联盟CCIA正式发布《网络安全专用产品指南》&#xff08;第二版&#xff09;&#xff08;以下简称《指南》&#xff09;。聚铭网络凭借突出技术优势、创新能力以及市场积累&#xff0c;旗下安全产品成功入选防火墙、网络安全审计、日志分析、网…...

高等数学学习笔记 ☞ 不定积分的积分方法

1. 第一换元积分法 1. 基础概念&#xff1a;形如的过程&#xff0c;称为第一换元积分法。 2. 核心思想&#xff1a;通过对被积函数的观察(把被积函数的形式与积分表的积分公式进行比较)&#xff0c;把外部的部分项拿到的内部(求原函数)&#xff0c; 然后进行拼凑&#xff0c;…...

08、如何预防SQL注入

目录 1、分析及其存在哪些危险 2、预防SQL注入 1、分析及其存在哪些危险 原理: SQL 注入是一种常见的网络攻击手段,攻击者通过在用户输入中插入恶意的 SQL 语句,利用程序对用户输入处理不当的漏洞,使恶意 SQL 语句被数据库服务器执行。 通常发生在应用程序将用户输入直接拼…...

如何发布自己的第一个Chrome扩展程序

如何发布自己的Chrome扩展程序 只需要六步即可完成Chrome扩展程序的发布 &#xff08;1&#xff09;首先打开google chrome 应用商城注册开发者账号的页面 &#xff08;2&#xff09;现在进行一个绑卡支付5美元的一次性注册费用即可。【不知道如何绑卡的支付的&#xff0c;文…...

ubuntu开机自启,其他方式

在 Ubuntu 22.04 中&#xff0c;如果不使用 .service 文件&#xff0c;仍然有其他方法可以让某个 .sh 文件随着系统启动而自动运行。以下是几种替代方法&#xff1a; 方法一&#xff1a;使用 crontab 的 reboot 选项 crontab 是 Linux 中用于设置周期性被执行的任务的工具。通…...

容器渗透横向

本质上要获得 1.获得容器IP段 2.获得主机IP段 3.获得本机IP 4.通过CNI或Docker0等扫描本机端口 Flannel 容器信息 rootubuntu-linux-22-04-desktop:/home/parallels/Desktop# k get po -A -o wide NAMESPACE NAME …...

软件测试—接口测试面试题及jmeter面试题

一&#xff0c;接口面试题 1.接口的作用 实现前后端的交互&#xff0c;实现数据的传输 2.什么是接口测试 接口测试就是对系统或组件之间的接口进行测试&#xff0c;主要是校验数据的交换、传递和控制管理过程&#xff0c;以及相互逻辑关系 3.接口测试必要性 1.可以发现很…...

ansible之playbook剧本

Playbook 1.playbook的组成部分 开头 用 --- 表示&#xff0c;表示是一个yaml文件&#xff0c;但是可以忽略不写 Tasks&#xff08;任务&#xff09; 包含了在目标主机上执行的操作&#xff0c;操作还是由模板来执行。每一个任务都是一个ansible的模块&#xff0c;调用系统命…...

基于 Python 的财经数据接口库:AKShare

AKShare 是基于 Python 的财经数据接口库&#xff0c;目的是实现对股票、期货、期权、基金、外汇、债券、指数、加密货币等金融产品的基本面数据、实时和历史行情数据、衍生数据从数据采集、数据清洗到数据落地的一套工具&#xff0c;主要用于学术研究目的。 安装 安装手册见…...

强网杯RS加密签名伪造及PyramidWeb利用栈帧打内存马

RS加密签名伪造及PyramidWeb利用栈帧打内存马 今年强网杯的一个新框架源代码如下 from wsgiref.simple_server import make_server from pyramid.config import Configurator from pyramid.events import NewResponse from pyramid.response import Response import utiluser…...

Java基础——概念和常识(语言特点、JVM、JDK、JRE、AOT/JIT等介绍)

我是一个计算机专业研0的学生卡蒙Camel&#x1f42b;&#x1f42b;&#x1f42b;&#xff08;刚保研&#xff09; 记录每天学习过程&#xff08;主要学习Java、python、人工智能&#xff09;&#xff0c;总结知识点&#xff08;内容来自&#xff1a;自我总结网上借鉴&#xff0…...

搭建Node.js后端

从头开始搭建一个Node.js后端&#xff0c;并实现查询历史数据的功能&#xff0c;下面是详细的步骤说明&#xff0c;包括环境配置、项目初始化、代码编写、以及服务器启动。 1. 环境配置 1.1 安装 Node.js 和 npm 首先&#xff0c;你需要在你的电脑上安装 Node.js 和 npm&…...

RV1126+FFMPEG推流项目(9)AI和AENC模块绑定,并且开启线程采集

前面两篇已经交代AI和AENC模块的配置&#xff0c;这篇就让这两个模块绑定起来&#xff0c;绑定的原因是&#xff0c;Aenc从Ai模块拿到采集的原始数据进行编码。 使用 RK_MPI_SYS_Bind 把 AI 节点和 AENC 进行绑定&#xff0c;其中 enModId 是模块 ID 号选择的是 RK_ID_AI、s32C…...

vue编写一个可拖动的模块,并可以和任何其他组件组合使用

实现思路&#xff1a; 使用 Vue 的自定义指令&#xff08;directive&#xff09;来处理拖动逻辑。在 mounted 钩子中添加鼠标事件监听器&#xff0c;以实现拖动功能。在 unmounted 钩子中移除鼠标事件监听器&#xff0c;防止内存泄漏。 代码示例&#xff1a; <template&g…...

Spring6.0新特性-HTTP接口:使用@HttpExchange实现更优雅的Http客户端

文章目录 一、概述二、使用1、创建接口HttpExchange方法2、创建一个在调用方法时执行请求的代理3、方法参数4、返回值5、错误处理&#xff08;1&#xff09;为RestClient&#xff08;2&#xff09;为WebClient&#xff08;3&#xff09;为RestTemplate 注意 一、概述 官方文档…...

【蓝桥杯】Python算法——求逆元的两种算法

目录 零、前言一、逆元二、扩展欧几里得算法三、费马小定理四、总结 零、前言 距离25年蓝桥杯还有大概三个月时间&#xff0c;接下来重点应该会放在蓝桥杯备考方向&#xff0c;一起努力&#xff0c;一起加油 一、逆元 什么是逆元&#xff1f;这是数论中的一个基本概念。如果存…...

音频语言模型与多模态体系结构

音频语言模型与多模态体系结构 多模态模型正在创造语言、视觉和语音等以前独立的研究领域的协同效应。这些模型使用通用架构,将每种模式视为不同的“token”,使它们能够以一种与人类认知非常相似的方式联合建模和理解世界。 ​ ​可以将多模态分为两个主要领域:输入空间(…...

Redis的安装和配置、基本命令

一、实验目的 本实验旨在帮助学生熟悉Redis的安装、配置和基本使用&#xff0c;包括启动Redis服务、使用命令行客户端进行操作、配置Redis、进行多数据库操作以及掌握键值相关和服务器相关的命令。 二、实验环境准备 1. JAVA环境准备&#xff1a;确保Java Development Kit …...

2025.1.17——三、SQLi regexp正则表达式|

题目来源&#xff1a;buuctf [NCTF2019]SQLi1 目录 一、打开靶机&#xff0c;整理信息 二、解题思路 step 1&#xff1a;正常注入 step 2&#xff1a;弄清关键字黑名单 1.目录扫描 2.bp爆破 step 3&#xff1a;根据过滤名单构造payload step 4&#xff1a;regexp正则注…...

flutter 常用UI组件

文章目录 1. Toast 文本提示框oktoastbot_toast2. loading 加载窗flutter_easyloading3. 对话框gex dialog4.下拉刷新pull_to_refresh5. pop 窗custom_pop_up_menu6. pin code 密码框pinput7. 二维码qr_flutter8. swiper 滚动组件carousel_sliderflutter_swiper_view9. Badge 角…...

基于微信小程序的健身房预约管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

Windows远程桌面网关出现重大漏洞

微软披露了其Windows远程桌面网关&#xff08;RD Gateway&#xff09;中的一个重大漏洞&#xff0c;该漏洞可能允许攻击者利用竞争条件&#xff0c;导致拒绝服务&#xff08;DoS&#xff09;攻击。该漏洞被标识为CVE-2025-21225&#xff0c;已在2025年1月的补丁星期二更新中得到…...

如何学习Transformer架构

Transformer架构自提出以来&#xff0c;在自然语言处理领域引发了革命性的变化。作为一种基于注意力机制的模型&#xff0c;Transformer解决了传统序列模型在并行化和长距离依赖方面的局限性。本文将探讨Transformer论文《Attention is All You Need》与Hugging Face Transform…...

RPA赋能内容创作:打造小红书入门词语图片的全自动化流程

&#x1f31f; 嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 用RPA全自动化批量生产【入门词语】图片做小红书商单&#xff0c;保姆级工具开发教程 最近由…...

Quantum supremacy using a programmable superconducting processor 全文翻译,配公式和图

2019年&#xff0c;谷歌的量子霸权文章&#xff0c; 原文链接&#xff1a; https://www.nature.com/articles/s41586-019-1666-5 第一稿&#xff0c;公式和视图后续再加 。。。 Quantum supremacy using a programmable superconducting processor 使用可编程超导处理器的量…...

Jupyter notebook中运行dos指令运行方法

Jupyter notebook中运行dos指令运行方法 目录 Jupyter notebook中运行dos指令运行方法一、DOS(磁盘操作系统&#xff09;指令介绍1.1 DOS介绍1.2 DOS指令1.2.1 DIR - 显示当前目录下的文件和子目录列表。1.2.2 CD 或 CHDIR - 改变当前目录1.2.3 使用 CD .. 可以返回上一级目录1…...

个人vue3-学习笔记

声明:这只是我个人的学习笔记(黑马),供以后复习用 。一天学一点,随时学随时更新。明天会更好的! 这里只给代码,不给运行结果,看不出来代码的作用我也该进厂了。。。。。 Day1 使用create-vue创建项目。 1.检查版本。 node -v 2.创建项目 npm init vue@latest 可…...