Redis的keyspace notification(键空间通知)实践
日期: 2018-08-29 浏览量: 6097
应用场景
类似微信红包功能24小时无人领取自动退还红包
redis键空间通知(keyspace notifications)
Redis的键空间通知(keyspace notifications)功能是自2.8.0版本开始加入的,客户端可以通过订阅/发布(Pub/Sub)机制,接收那些以某种方式改变了Redis数据空间的事件通知。比如:所有改变给定key的命令;所有经过lpush操作的key;所有在0号数据库中过期的key等等。
通知是通过Redis的订阅/发布机制发送的,因此,所有支持订阅/发布功能的客户端都可在无需调整的情况下,使用键空间通知功能。
redis服务端配置
修改配置文件redis.conf中的:notify-keyspace-events Ex,默认为 # notify-keyspace-events "" 。
# K Keyspace事件,以__keyspace@<db>__前缀发布。
# E Keyevent事件,以__keyevent@<db>__前缀发布。
# g泛型命令(非类型特定的),比如DEL, EXPIRE, RENAME,…
# $ String命令
# l命令列表
#年代设置命令
# h散列的命令
# z排序集命令
# x过期事件(每次键过期都会生成事件)
# e退出事件(退出maxmemory键时生成的事件)
# g$lshzxe的别名,因此“AKE”字符串表示所有事件。
测试
Redis发布所有通知,客户端A订阅所有消息:
在客户端B上执行setex
然后客户端A的打印如下:
代码实现 (node)简单版
const Redis = require('ioredis');
const redis = new Redis({
port: 6379,
host: '127.0.0.1',
family: 4,
password: '888888',
db: 0
});
const redisSet = new Redis({
port: 6379,
host: '127.0.0.1',
family: 4,
password: '888888',
db: 0
});
//设置hello 10秒过期
redisSet.setex('hello', '10', '你好')
//订阅给定模式相匹配的所有频道
redis.psubscribe('__key*@0__:*', function (err, count) {
console.log(err) //NULL
console.log(count) //1
});
//监听消息10秒后会输出 (可以根据key 处理相关业务 例如 24小时到期后退回红包)
redis.on('pmessage', function (pattern, channel, message) {
console.log(pattern) //__key*@0__:*
console.log(channel) //__keyevent@0__:expired
console.log(message) //hello
});
人活着,其实就是一种心态,你若觉得快乐,幸福无处不在;你为自己悲鸣,世界必将灰暗。
阅读排行
最新文章
联系方式
- 邮箱:m18811126599@163.com
- QQ:896956692