redis的数据库通知(notify-keyspace-events)
redis的数据库通知(notify-keyspace-events)
共分为两类:一类是键空间通知 另一类是键事件通知
概述
数据库通知是redis在2.8之后新增的功能,让客户端可以已发布/订阅模式来获取数据库中键的变化以及某事件的发生
- 首先要知道这个发送通知的操作是占内存的,所以默认的关闭的,需要我们手动的在redis.conf里面进行开启
- 如何开启:
- 进入redis安装地址的/redis/etc文件下,vim redis.conf
- 找到notify-keyspace-events,默认为“”,这里需要进行配置,配置完就开启了
- K Keyspace events, published with keyspace@ prefix.
E Keyevent events, published with keyevent@ prefix.
g Generic commands (non-type specific) like DEL, EXPIRE, RENAME, …
$ String commands
l List commands
s Set commands
h Hash commands
z Sorted set commands
x Expired events (events generated every time a key expires)
e Evicted events (events generated when a key is evicted for maxmemory)
A Alias for g$lshzxe, so that the “AKE” string means all the events. - K和E是必须要选一个配的,不行就配置AKE,表示所有的事件和键变化都会发送两条通知
开启后:
开启后能接收到的类型只有两种:keyspace和keyevent
前者为事件的具体操作,后者为事件影响的键名
- 数据库0中删除一个叫mykey的键 127.0.0.1:6379> del mykey
- 数据库0会发布下面两条信息:
- public keyspace@0:mykey del (键空间信息,mykey键被删了)
- public keyevent@0:del mykey (事件空间信息,执行了删除事件,删除了mykey)
redis发布后我们如何接受呢
项目中配置了redis.conf,redisListenerConfig之后
编写个 RedisKeyExpirationListenerServer 类继 KeyExpirationEventMessageListener
然后实现他的doRegister方法和onMessage方法
主要就是doRegister里面你进行订阅的topic是啥
- 想要订阅键空间就是 __keyspace,具体哪个键就后面@再加上键的key,如user,key a,key b等等。
- 想要订阅键事件就是__keyevent,具体哪个事件就后面@再加上事件的操作,如del ,set ,expire等
如何接收实例:
我的需求是当设置的某个键过期的时候,我这边能接收到这个事件,所以这里我接收的是keyevent@0__:expired这个topic
- 监听类的doRegister和onmessage方法
- doregister就是监听keyevent(键事件通知)中的expired事件
- tring topic = “keyevent@“+database+”:expired”;
- onMessage就是获取到这个过期的键的详情,直接message.toString就可以获取到这个过期键的key(这里要注意,message里面获取不到该过期键的value)
- String expiredKey = message.toString();
@Overrideprotected void doRegister(RedisMessageListenerContainer listenerContainer) {String topic = "__keyevent@"+database+"__:expired";log.info("配置监听哪个频道:"+topic);PatternTopic patternTopic = new PatternTopic(topic);// 频道可以是多,多个传listlistenerContainer.addMessageListener(this,patternTopic);}@Overridepublic void onMessage(Message message, byte[] pattern) {// 用户做自己的业务处理即可,注意message.toString()可以获取失效的keyString expiredKey = message.toString();log.info("失效的key"+expiredKey);if(expiredKey.contains(RedisContact.SERVERNAME)){deal(expiredKey);}
redis的数据库通知(notify-keyspace-events)相关推荐
- 键空间通知(keyspace notification)
Redis键空间通知(keyspace notification) 本文档翻译自: http://redis.io/topics/notifications . 键空间通知功能目前仍在开发中,这个文档 ...
- Redis键空间通知(Keyspace Notifications)
Redis Keyspace Notifications https://redis.io/topics/notifications Redis 是一个键值对数据库服务器,服务器中每个数据库都由 re ...
- Redis的事件通知
Redis的事件通知通过发布/订阅模式来实现的. 事件通知分为两种: keyspace 和 kevevent. keyspace称为键空间通知,格式为 __keyspace@DB__:KeyPatte ...
- Redis——单机数据库的实现
数据库 Redis服务器将所有数据库都保存在服务器状态redis.h/redisServer结构的db数组中 db数组的每个项都是一个redis.h/redisDb结构 每个redisDb结构代表一个 ...
- redis实现数据库(一)
转:https://www.cnblogs.com/beiluowuzheng/p/9738159.html 服务器中的数据库 Redis服务器将所有数据库都保存在服务器状态redis.h/redis ...
- Redis (二) 数据库
前言 本文基于 黄建宏-<Redis设计与实现>总结.第二部分为Redis 数据库,RDB持久化,AOF持久化,事件,客户端,服务器 目录 前言 数据库 服务器中的数据库 服务器数据库示例 ...
- 虹科干货|Redis企业版数据库为企业「数据安全」叠加最强Buff!
虹科干货|Redis企业版数据库为企业「数据安全」叠加最强Buff! "这是一场可预见的噩梦!" 近期,黑客通过攻击亚洲最大两家数据中心-万国数据和新科电信媒体,获取国际巨头企业的 ...
- Redis缓存数据库
目录 NoSQL NoSQL特点 常见的NoSQL数据库 redis MongoDB 行式存储数据库 列式存储数据库 redis简介 安装redis redis启动服务 前台启动 提取信息 后台启动 ...
- Redis与数据库的爱恨纠葛
Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库. 早期数据库只要有数据库的操作---增--删--改--查 当用户量特别多的情况下,数据库的数量一定是跟不上用户 ...
最新文章
- safari快捷图标不见了_Win7桌面图标不见了怎么办?附解决办法
- js pug 代码_用JS写的windows95操作系统
- 我的2015学习总结及2016的技术规划(2016.02)
- BCompare日志
- Oracle 常用命令举例
- uniapp 封装网络请求
- web靶机:kali linux 2.0下搭建DVWA渗透测试演练平台
- python爬虫基础扫盲之urllib.pase解析URL
- 【codeforces 799A】Carrot Cakes
- CentOS7系统服务管理systemctl
- 记录一个Lock和sychronized应用及双检锁
- NSURLConnect 的简单实用(iOS8淘汰)
- 【生物信息学】外显子测序的原理及优缺点
- 教你用GoldWave剪裁音频作短视频BGM
- 运算放大器:加法电路
- JavaScript测试题
- 计算机专业英语名词(复试)
- 计算机R3处理器,电脑r3处理器好不好
- 超声波模块测距 Arduino代码
- MySQL 重置 root 密码以及修改密码时报错password字段不存在