Redis过期键监听

在 Redis 中,为了监听过期键事件,需要使用 Redis 的 Keyspace Notifications 功能。这一功能允许客户端订阅某些事件的发生,比如键过期、键删除等。

启用过期键监听

在 Redis 的配置文件 redis.conf 中,确保配置项 notify-keyspace-events 包含 'Ex''E' 表示启用过期事件通知,'x' 表示键事件。这可以通过直接在配置文件中设置:

notify-keyspace-events Ex

也可以在 Redis 运行时使用命令设置

CONFIG SET notify-keyspace-events Ex

订阅 Redis 过期事件

@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {@Overridepublic void onMessage(Message message, byte[] pattern) {});}
}

注意事项

  • 启用 Keyspace Notifications 会有一定的性能开销,因为 Redis 需要处理和传播事件通知。应在可能的情况下限制通知的范围,仅启用必要的事件类型。
  • 且通知是一次性的,没有ack机制,若收到通知后处理失败,将不再收到通知。需自行保证收到通知后处理成功。
  • 由于Redis key过期删除策略是定期+惰性删除,当key过多时,删除会有延迟。

如果对过期通知实时有要求的场景慎重考虑使用这种方式,引用Redis官方文档描述。

https://redis.io/docs/latest/develop/use/keyspace-notifications/#timing-of-expired-eventsicon-default.png?t=N7T8https://redis.io/docs/latest/develop/use/keyspace-notifications/#timing-of-expired-events

Timing of expired events

Keys with a time to live associated are expired by Redis in two ways:

  • When the key is accessed by a command and is found to be expired.
  • Via a background system that looks for expired keys in the background, incrementally, in order to be able to also collect keys that are never accessed.

The expired events are generated when a key is accessed and is found to be expired by one of the above systems, as a result there are no guarantees that the Redis server will be able to generate the expired event at the time the key time to live reaches the value of zero.

If no command targets the key constantly, and there are many keys with a TTL associated, there can be a significant delay between the time the key time to live drops to zero, and the time the expired event is generated.

Expired (expired) events are generated when the Redis server deletes the key and not when the time to live theoretically reaches the value of zero.

 

与生存时间(TTL)相关联的键通过两种方式在 Redis 中过期:

  1. 当一个命令访问该键并发现其已过期时。
  2. 通过一个后台系统,该系统在后台增量地查找过期的键,以便能够收集那些从未被访问过的键。

过期事件是在键被访问并通过上述某个系统发现过期时生成的。因此,Redis 服务器无法保证在键的生存时间降至零时就能立即生成过期事件。

如果没有命令持续访问该键,并且存在许多具有 TTL 的键,那么从键的生存时间降至零到生成过期事件之间可能会有显著的延迟。

过期(expired)事件是当 Redis 服务器删除该键时生成的,而不是在生存时间理论上达到零时生成的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/416330.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python画笔案例-031 绘制器形图

1、绘制蝌蚪 通过 python 的turtle 库绘制器形图,如下图: 2、实现代码 绘制器形图,以下为实现代码: """器形图.py采用前进,倒退,左转,右转命令制作的一个图形。 ""&q…

场外个股期权机构有哪些?

今天带你了解场外个股期权机构有哪些?场外个股期权交易商名单包括了多家券商,这些券商在场外期权市场中扮演着重要的角色。 场外个股期权通常涉及的主要机构包括: 1.投资银行:这些机构常常作为交易的中介或对手方,为…

绝区零苹果电脑能玩吗,如何在Mac上玩绝区零?绝区零MacBook 下载安装保姆级教程

《绝区零》是一款由米哈游开发的都市动作冒险游戏,游戏的故事背景设定在一个名为「新艾利都」的现代化大都市中,玩家将扮演一对「绳匠」兄妹展开冒险。很多玩家都在问苹果电脑笔记本Mac怎么玩绝区零,今天就给大家介绍一下《绝区零》是一款什么…

【UE5】控件蓝图——树视图(TreeView)的基本使用

目录 前言 效果 步骤 一、显示根节点 二、显示子节点 前言 我们在视口中添加1个方块,2个球体,5个圆柱 它们在大纲视图中的层级关系如下,那么如何将这种层级关系显示在树视图中是本篇文章要解决的问题。 效果 步骤 一、显示根节点 1…

跨境电商代购系统中前台基本功能介绍:帮助更快的了解跨境代购业务

前台多语言:可支持语言有中文(繁体)中文(简体)英文等。多语言使用百度翻译引擎接口实现,翻译效果与百度一致;网站语言分为两大块:1.系统后台有语言包可以编辑修改网站标题以及发布文…

mongodb在Java中条件分组聚合查询并且分页(时间戳,按日期分组,年月日...)

废话不多说,先看效果图: SQL查询结果示例: 多种查询结果示例: 原SQL: db.getCollection("hbdd_order").aggregate([{// 把时间戳格式化$addFields: {orderDate: {"$dateToString": {"for…

[数据集][目标检测]课堂行行为检测数据集VOC+YOLO格式4065张12类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):4065 标注数量(xml文件个数):4065 标注数量(txt文件个数):4065 标注…

【MySQL】索引性能分析工具详解——>为sql优化(select)做准备

前言 大家好吖,欢迎来到 YY 滴MySQL系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的《Lin…

DS18B20时序抓图

关于时序文字描述参见:DS18B20时序描述 一个完整的读数过程如下: 对应的过程如下: Reset Presence RomCmd:0xCC(Skip Rom) FunCmd:0xBE(Read Scratchpad) Data:0x01A0(Temperature,26) Reset Presence RomCmd:0xCC(Skip Rom) FunCmd:0x44(Co…

两大信号 华为又有神操作

文|琥珀食酒社 作者 | 积溪 华为的神操作又要来了 三折叠手机马上就要亮相 手机圈的所有友商们 又要睡不着觉了 这次华为选择和苹果硬刚 发布会都定在了同一天 绝对不是巧合 而是神来之笔 就是要告诉苹果 该是华为的市场 它都得拿回来 也让友商们认清了…

注册中心 Eureka Nacos

文章目录 目录 文章目录 1. 什么是注册中心? 2.常见的注册中心 3 . Eureka 4 . Nacos 5 . Nacos与Eureka的区别 总结 1. 什么是注册中心? 在最初的架构体系中, 集群的概念还不那么流行, 且机器数量也比较少, 此时直接使用DNSNginx就可以满足几乎所有服务的发现. 相…

【Qt窗口】—— 对话框

目录 (一) 对话框介绍 (二)对话框的分类 2.1 模态对话框 2.2 非模态对话框 2.3 混合属性对话框 (三)内置对话框 消息对话框 QMessageBox 颜色对话框 QColorDialog 字体对话框 QFontDialog 输入对…

Scrapy入门学习

文章目录 Scrapy一. Scrapy简介二. Scrapy的安装1. 进入项目所在目录2. 安装软件包Scrapy3. 验证是否安装成功 三. Scrapy的基础使用1. 创建项目2. 在tutorial/spiders目录下创建保存爬虫代码的项目文件3.运行爬虫4.利用css选择器Scrapy Shell提取数据例如: Scrapy 一. Scrapy…

glsl着色器学习(十)缩放

对二维图形进行缩放&#xff0c;需要用到顶点着色器&#xff0c;顶点着色器经过矩阵变换&#xff0c;会将模型空间最终转换成裁剪空间。下面就来操作矩阵 这里需要用到一个库glMatrix。 首先修改顶点着色器 <script id"vertex-shader-2d" type"x-shader/x-…

Win32创建虚拟打印机

最近有个需求需要对报告打印进行统一的管理&#xff0c;最终实现方案如下&#xff1a; 1、安装Microsoft Print To PDF虚拟打印机&#xff0c;该打印机可以将所有打印数据转换为PDF 2、通过Microsoft Print To PDF虚拟机参数复制一台新的虚拟打印机 3、创建打印输出端口&…

服务器数据恢复—LeftHand存储中raid5阵列多块磁盘离线的数据恢复案例

LeftHand存储支持RAID5、RAID6、RAID10磁盘阵列&#xff0c;同时还支持卷快照&#xff0c;卷动态扩容等。下面简单聊一下LeftHand存储的结构和一个LeftHand p4500存储中磁盘阵列数据恢复案例。 服务端&#xff1a; 客户端&#xff1a; LeftHand存储结构&#xff1a; Lefthand存…

C语言指针详解-包过系列(一)目录版

C语言指针详解-包过系列&#xff08;一&#xff09;目录版 1.内存和地址1.1内存1.2 深入理解编址 2.指针变量和地址2.1 取地址操作符&#xff08;&&#xff09;2.2 指针变量和解引用操作符&#xff08;*&#xff09;2.2.1 指针变量2.2.2 指针变量各部分理解2.2.3 解引用操作…

Oracle 常用函数大全

文章目录 一、空校验1. NVL 空校验2. COALESCE 空校验 二、排序1. ORDER BY 排序2. ORDER BY DECODE 指定值排序 三、排名1. RANK 排名2. DENSE RANK 密集排名 四、限制条数1. ROWNUM 限制2. FETCH 限制 五、字符串处理1. TO_CHAR 字符串转换2. || 字符串拼接3. CONCAT 字符串拼…

【Qt】颜色对话框QColorDialog

颜色对话框QColorDialog 颜⾊对话框的功能是允许⽤⼾选择颜⾊。继承⾃ QDialog 类。 Qt QColorDialog 的功能就是内置了调色板&#xff0c;效果和上图画图板的调色板类似。 常用方法介绍&#xff1a; QColorDialog (QWidget *parent nullptr) //创建对象的同时设置⽗对象Q…

获取navicat已保存数据库连接的密码

打开connections.ncx&#xff0c;可以看到Passwordxxx,这是加密后的密码 解密 在线的运行工具https://tool.lu/coderunner 运行如下代码&#xff0c;代码中的密码改成你的密码&#xff0c;在倒数第二行位置 <?phpnamespace FatSmallTools;class NavicatPassword{protected…