Redis的KeyExpirationEventMessageListener键过期监听器
MessageListener通过监听key过期的Redis keyspace通知,然后通过ApplicationEventPublisher发布RedisKeyExpiredEvent事件的模式进行事件监听和广播。
redis.conf地址:https://github.com/redis/redis/blob/unstable/redis.conf
Redis官方地址:https://redis.io/topics/notifications
一、开启Redis键空间
配置发布哪些类型的键空间通知,允许客户端订阅PUB/SUB频道:
- 通过修改redis.conf配置文件;
- 通过应用程序命令行参数模式;
notify-keyspace-events Ex
notify-keyspace-events选项用于配置Keyspace Notifications,即当Redis数据集发生变化时,它可以发布事件。该选项枚举值由多个字符组成,如下:
- K:Keyspace事件,当某个键的事件发生时发布,发布事件使用__keyspace@__前缀。
- E:Keyevent事件,当某个键的事件发生时发布,但事件类型与Keyspace事件不同。如:键的创建、删除、过期等相关操作(set、del、expired、evicted),发布事件使用__keyevent@__前缀。
- g:通用命令(如:DEL、EXPIRE、RENAME…)触发的事件。
- $:String命令触发的事件。
- l:List命令触发的事件。
- s:Set命令触发的事件。
- h:Hash命令触发的时间。
- z:Zset(Sorted Set)命令触发的事件。
- x:过期时间(每当key过期时生成)。
- e:驱逐时间(当key由于maxmemory策略而被驱逐时生成)。
- n:新key事件。
- t:Stream命令。
- A:g$lshzxetd的别名,表示所有事件。
注意:
- K和E的主要区别在于它们发布的事件的详细信息不同。
- 你可以组合这些字符来指定你感兴趣的事件类型和数据类型。
- 默认情况下,这个选项是关闭的(即没有设置)。
二、事件类型
Keyspace通知是通过为影响Redis数据空间的每个操作发送两种不同类型的事件来实现的,例如,针对数据库0中名为mykey的键的DEL操作将触发两条消息的传递,这与以下两个PUBLISH命令完全等效:
PUBLISH __keyspace@0__:mykey del
PUBLISH __keyevent@0__:del mykey
第一个通道监听所有针对key为mykey的时间,另一个通道仅监听key为mykey上的del操作时间。
第一种事件在通道中有keyspace前缀,称为keyspace通知;第二种具有keyevent前缀,称为keyevent通知。
在上面的示例中,为mykey键生成了一个del事件,会产生两条消息:
- keyspace事件通道接收key的事件名称作为消息。
- keyevent事件通道接收key的名称作为消息。
可以只启用一种通知,以便只传递我们感兴趣的事件子集。
三、案例
- 要启用列表和通用命令事件,从事件名称的角度来看,使用如下:
notify-keyspace-events Elg
- 获取订阅频道_keyevent@0_:expired过期的keys,使用如下:
notify-keyspace-events Ex
四、Redis命令行客户端
CONFIG GET notify-keyspace-events
1) "notify-keyspace-events"
2) "xE"
- 修改notify-keyspace-events
CONFIG SET notify-keyspace-events Eg
"OK"
五、KeyExpirationEventMessageListener设置notify-keyspace-events属性后为何无法修改?
org.springframework.data.redis.listener.KeyspaceEventMessageListener#init方法定义了设置notify-keyspace-events属性的方法,如果notify-keyspace-events方法不为空则不允许修改:
public void init() {if (StringUtils.hasText(keyspaceNotificationsConfigParameter)) {RedisConnection connection = listenerContainer.getConnectionFactory().getConnection();try {//获取notify-keyspace-events属性配置Properties config = connection.getConfig("notify-keyspace-events");//判定notify-keyspace-events属性是否有值,无值则允许修改if (!StringUtils.hasText(config.getProperty("notify-keyspace-events"))) {//修改notify-keyspace-events属性connection.setConfig("notify-keyspace-events", keyspaceNotificationsConfigParameter);}} finally {connection.close();}}doRegister(listenerContainer);}
开源SDK:https://github.com/mingyang66/spring-parent
相关文章:
Redis的KeyExpirationEventMessageListener键过期监听器
MessageListener通过监听key过期的Redis keyspace通知,然后通过ApplicationEventPublisher发布RedisKeyExpiredEvent事件的模式进行事件监听和广播。 redis.conf地址:https://github.com/redis/redis/blob/unstable/redis.conf Redis官方地址࿱…...
MP4视频压缩,推荐这五大压缩操作
MP4视频压缩,在当今数字化的时代,视频已经成为我们日常生活和工作中不可或缺的一部分。然而,随着视频分辨率和长度的增加,MP4文件的大小也变得越来越大,这不仅占用了大量的存储空间,还使得传输和分享变得困…...
docker 安装NextERP
有很多方式: 一 docker sudo docker run -itd -p 8016:80 -v ERPNext_db:/var/lib/mysql -v ERPNext_sites:/home/frappe/frappe-bench/sites --name ERPNext lvxj11/erpnext:latest二 git clone https://e.coding.net/yuanerp/yuanerp/frappe_docker.gitcp exa…...
Android 存储之 SharedPreferences 框架体系编码模板
一、SharedPreferences 框架体系 1、SharedPreferences 基本介绍 SharedPreferences 是 Android 的一个轻量级存储工具,它采用 key - value 的键值对方式进行存储 它允许保存和读取应用中的基本数据类型,例如,String、int、float、boolean …...
弹性容器Flex中的自动外边距(Auto Margins) 的作用
最近在使用Flex布局时,遇到的一个情况: 有以下的代码: <div class"toolbox"><button id"decrease">-</button><span id"size">1</span><button id"increase">…...
C语言调用子函数时入/出栈(保护/恢复现场)全过程分析:以Cortex-M3为例
0 参考资料&工具 Cortex M3权威指南(中文).pdf keil5(用于仿真查看寄存器、栈变化)1 C语言调用子函数时出入/出栈(保护/恢复现场)全过程分析 使用C语言调用子函数是如何保护/恢复现场的呢?本文以Cortex-M3为例&a…...
理解Sigmoid激活函数原理和实现
Sigmoid 激活函数是一种广泛应用于机器学习和深度学习中的非线性函数,特别是在二分类问题中。它的作用是将一个实数值映射到(0, 1)区间,使得输出可以被解释为概率值,这在处理二分类问题时非常有用。 Sigmoid 函数的定义 Sigmoid 函数的数学…...
探秘DevSecOps黄金管道,安全与效率的完美融合
软件应用的安全性已成为企业和用户关注的焦点,DevSecOps作为一种将安全融入开发和运维全过程的理念和实践,旨在消除传统开发模式中安全被后置处理的弊端。DevSecOps黄金管道(Golden Pipeline)是实现这一理念的核心框架,…...
Redis的内存淘汰策略- volatile-lru
volatile-lru 策略简介 在 volatile-lru 策略下,当 Redis 的内存使用达到配置的上限(maxmemory)时,它会优先删除那些设置了过期时间的键,并且选择最近最少使用的键进行删除。LRU 算法的核心思想是,优先删除…...
HTTP和HTTPS的区别?哪一个更适合你的网站?
什么是 HTTP? HTTP(超文本传输协议)(Hypertext Transfer Protocol)它是一组允许网络浏览器与网络服务器(托管网站的计算机)进行通信的规则。 HTTP 使用请求-响应模型。 例如,当你…...
OpenAI SORA团队负责人 通往智能的方式 报告笔记
OpenAI SORA团队负责人 通往智能的方式 报告笔记 这个报告其实是2024年智源大会的主旨报告,OpenAI SORA和DALL-E团队负责人Aditya Ramesh给出的一段有关多模态大模型的报告。我去听了现场,感觉倍受启发,但是感觉很多并不能当场理解ÿ…...
006-Sleuth(Micrometer)+ZipKin分布式链路追踪
这里写目录标题 1 分布式链路追踪概述1.1 为什么会出现这个技术?需要解决哪些问题?1.2 在分布式与微服务场景下需要解决的问题 2 新一代Spring Cloud Sleuth:Micrometer2.1 官网重要提示2.1.1 新一代Sleuth2.1.2 官网2.1.3 说明2.1.3.1 老项目…...
AI模型:追求全能还是专精?-- 之6 语言复杂度类别(Category 0~3 类)和语言功能性类型(Type 0~Ⅲ 型)之2
Q17、我前面说过,语言复杂度的0~3级(Category 0~3)表示了语言的的上下文相关性 : 完全不相关, 单相关的 单词上下文, 双相关的句子上下文 全相关的文章上下文 。我准备翻译为 Context - irrelative /relati…...
20240907 每日AI必读资讯
大疆发布 DJI Neo 掌上 Vlog 无人机! - DJI Neo 是 DJI 迄今最轻、最小的无人机,无需遥控器,掌上起降即可轻松拍出主角大片… |135 克轻巧便携 丨零门槛掌上起降 丨AI 智能跟拍 ,一键成片 丨多种操控,丰富…...
深度学习基础--卷积基础模块
本节主要关注卷积神经网络发展过程中具有里程碑意义的基础模块,了解它们的原理和设计细节 1. 批归一化 在机器学习中,一般会假设模型的输入数据的分布是稳定的。如果这个假设不成立,即模型输入数据的分布发生变化,则称为协变量偏…...
视频智能分析打手机检测算法安防监控打手机检测算法应用场景、算法源码、算法模型介绍
随着智能手机的普及,手机已成为人们生活中不可或缺的一部分。然而,在某些场合,如驾驶、会议、学校课堂等,不当使用手机可能会导致安全隐患或干扰他人。因此,开发出一种能够准确识别并阻止不当使用手机的行为检测算法显…...
6.2图的存储及基本操作
6.2.1顺序存储 邻接矩阵法,用一个一维数组存储图中顶点信息,二维数组存储图中边的信息 无向图 1.无向图的邻接矩阵关于对角线对称,可采用压缩存储 2.边数为e,则邻接矩阵中1为2e; 3.第i行or 第i列非零元素之和恰好为顶点i的度数 4.判断是否有边用0,1 5. 有向图 1.关于对…...
Java语法全解析:掌握基本规则,打造稳固编程基础!
Java基本语法是编写Java程序的核心,它包括了数据类型、运算符、控制结构、类与对象等基本组成部分。这些语法要素共同构成了Java程序的基础框架,掌握它们是进行Java编程的前提。以下是Java基本语法的详细介绍: 数据类型 基本数据类型&#x…...
同时播放多个视频
介绍一款小众的视频播放器,之前有小伙伴找那种可以同时播放多个视频的软件,“恒硕加播放”可以做到这一点,功能不是太多,但是日常播放是足够了。 同时播放多个视频控制多个视频跳到指定进度同时暂停/播放/停止/静音/倍速浏览系统…...
伴奏提取消除人声如何操作?轻松几步玩转音乐世界
你是否梦想着独自演绎一曲,或是进行个性化的混音创作,却又希望摆脱原唱声音的干扰?那么,学会免费伴奏提取就显得尤为关键。 在这篇文章中,我将为你展示四种简单易学的方法,让你能够轻松地从歌曲中提取出伴…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
