python中的Redis键空间通知(过期回调)

Redis是一个内存数据结构存储库,用于缓存,高速数据摄取,处理消息队列,分布式锁定等等。

使用Redis优于其他内存存储的优点是Redis提供持久性和数据结构,如列表,集合,有序集和散列。

在本文中,我想简要介绍一下Redis键空间通知。我将解释键空间通知是什么,并演示如何配置Redis以接收它们。然后我将向您展示如何在python中订阅Redis通知。

在我们开始之前,请按照此处所述安装并启动Redis服务器:https//redis.io/topics/quickstart

启用键空间通知

默认情况下,禁用键空间事件通知。我们可以在redis.confredis-cli中启用它们,如下所示:

$ redis-cli config set notify-keyspace-events KEA OK

KEA字符串意味着每一个可能的事件被启用。要查看每个字符的含义,请查看文档
CLI可以在特殊模式下,它允许您订阅的频道,以接收邮件的工作。

现在让我们检查事件是否正常:

$ redis-cli --csv psubscribe '*' Reading messages... (press Ctrl-C to quit) "psubscribe","*",1

psubscribe '*'意味着我们想要使用模式订阅所有事件*在新的终端输入redis-cliSET key1 to value1

127.0.0.1:6379> set key1 value1 OK

在第一个终端,您将看到:

$ redis-cli --csv psubscribe '*' Reading messages... (press Ctrl-C to quit) "psubscribe","*",1 "pmessage","*","__keyspace@0__:key1","set" "pmessage","*","__keyevent@0__:set","key1

通知正在运行:)

Redis键空间通知

Redis密钥空间通知自2.8.0版开始提供。对于每个更改任何Redis密钥的操作,我们可以配置Redis将消息发布到Pub / Sub。然后我们可以订阅这些通知。值得一提的是,只有在真正修改了密钥时才会生成事件。例如,删除不存在的密钥不会生成事件。

上面你收到了三个事件:

"psubscribe","*",1 "pmessage","*","__keyspace@0__:key1","set" "pmessage","*","__keyevent@0__:set","key1

第一个事件意味着我们已成功订阅作为回复中第二个元素的通道。1表示我们当前订阅的频道数。第二个事件是密钥空间通知密钥空间信道中,我们收到了事件的名称set作为消息。第三个事件是关键事件通知keyevent频道中,我们收到了密钥的名称key1作为消息。

Redis Pub / Sub

使用Redis的Pub / Sub图层传递事件。
为了订阅频道channel1channel2,客户端发出一个订阅与频道的名称命令:

SUBSCRIBE channel1 channel2

其他客户(发布者)发送到这些频道的消息将由Redis推送到所有订阅的客户端(订阅者)。
Redis Pub / Sub实现支持模式匹配。客户端可以订阅glob样式模式,以便使用PSUBSCRIBE接收发送到与给定模式匹配的通道名称的所有消息
例如:

PSUBSCRIBE channel*

将接收所有发来的短信channel1channel.b等等。

如果您的发布/订阅客户端断开连接并稍后重新连接,则在客户端断开连接期间传递的所有事件都将丢失。

Redis为每个客户端维护一个客户端输出缓冲区。Pub / Sub的客户端输出缓冲区的默认限制设置为:

client-output-buffer-limit pubsub 32mb 8mb 60

Redis将强制客户端在两种情况下断开连接:如果输出缓冲区增长超过32MB,或者输出缓冲区持续保持8MB数据60秒。
这些迹象表明客户消费数据的速度比发布时慢。

将来有计划允许更可靠的事件传递,但可能会在更一般的层面上解决,要么为Pub / Sub本身带来可靠性,要么允许Lua脚本拦截Pub / Sub消息以执行推送等操作把事件放到一个清单中。

订阅python中的通知

首先我们需要Redis redis-py的python客户端,所以让我们安装它:

$ pip install redis 事件循环

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpsdgy.html