Redis如何实现数据库通知

|

基于Redis的发布订阅机制,我们就可以实现数据库通知功能了。该功能常常用于作为对数据或者命令的监控。

因为开启数据库通知需要消耗一定的CPU,所以默认配置下,是关闭状态的。为了开启这个功能更,我们可以修改redis.conf文件:

1
notify-keyspace-events KElg

如上,我们开启了:

  • K:键空间通知,所有通知以__keyspace@<db>__为前缀;
  • E:键事件通知,所有通知以__keyevent@<db>__为前缀;
  • l:列表命令通知;
  • g:DELEXPIRERENAME 等类型无关的通用命令的通知。

更多关于notify-keyspace-events的配置,请参考官方文档:Redis Keyspace Notifications[1]

现在我们启动Redis服务器,就支持数据库通知了。

现在我们在一个客户端1订阅一个键空间通知,监听我的钱包my_money:

1
2
3
4
5
127.0.0.1:6379> SUBSCRIBE __keyspace@0__:my_money
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "__keyspace@0__:my_money"
3) (integer) 1

在另一个客户端2,给我的钱包打100块钱看看:

1
2
127.0.0.1:6379> SET my_money 100
OK

结果我们在客户端1可以收到以下到账通知:

1
2
3
1) "message"
2) "__keyspace@0__:my_money"
3) "set"

另外,我们也可以监听某一个命令:

1
127.0.0.1:6379> SUBSCRIBE __keyevent@0__:del

References


  1. Redis Keyspace Notifications. Retrieved from https://redis.io/topics/notifications ↩︎