发布和订阅
发布-订阅(Publish-Subscribe,PubSub),简单的说,在发布-订阅模式下,想要发布事件的发布者会把消息发送到一个PubSub频道(Channel),这个频道会把这个事件投递给这个频道感兴趣的每一位订阅者。许多流行的消息传递中间件,比如Kafka和ZeroMQ,就是利用了这个模式来构建消息投递系统,Redis也是一样。
SUBSCRIBE命令用来监听特定频道中可用消息,一个客户端可以使用SUBSCRIBE命令一次订阅多个频道消息,还可以使用PSUBSCRIBE命令订阅匹配指定模式的频道。要取消订阅频道,可以使用UNSUBSCRIBE命令。
PUBLISH命令用于将一条消息发送到指定的频道,订阅了该频道的所有订阅者都会接收到这条消息。
另一个重要的命令是PUBSUB,用于管理频道,我们可以通过PUBSUB CHANNELS命令获取当前活跃的频道。
相关命令
SUBSCRIBE、PUBLISH、PSUBSCRIBE、UNSUBSCRIBE、PUBSUB
操作
1、使用SUBSCRIBE订阅一个频道或多个频道
#在第一个终端执行
127.0.0.1:6379> SUBSCRIBE china #这里订阅一个china频道
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "china"
3) (integer) 1
#在第二个终端执行
127.0.0.1:6379> SUBSCRIBE china sichuan #这里订阅了两个频道,china和sichuan
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "china"
3) (integer) 1
1) "subscribe"
2) "sichuan"
3) (integer) 2
2、使用PUBLISH命令向频道发布消息
127.0.0.1:6379> PUBLISH china "I love you" #两个订阅者都会接收到这个消息
(integer) 2
127.0.0.1:6379> PUBLISH sichuan "chengdu" #只有订阅了sichuan这个频道的订阅者才会接收到这个消息
(integer) 1
#第一个终端
1) "message"
2) "china"
3) "I love you"
#第二个终端
1) "message"
2) "china"
3) "I love you"
1) "message"
2) "sichuan"
3) "chengdu"
3、使用PUBSUB命令获取当前活跃的频道
127.0.0.1:6379> PUBSUB CHANNELS
1) "china"
2) "sichuan"
4、使用UNSUBSCRIBE命令取消订阅频道
127.0.0.1:6379> UNSUBSCRIBE china
1) "unsubscribe"
2) "china"
3) (integer) 0
#但是并没有取消掉,所以这里需要找其他原因
其他内容
对频道的生命周期而言,一个频道之前未被订阅过,那么使用SUBSCRIBE命令会自动创建频道,当频道上没有活跃的订阅者时,频道将会被删除。
一定要特别注意,Redis的PubSub相关的机制均布支持持久化,也就是说,消息、频道和PubSub的关系都不会保存在磁盘上。如果服务器宕机或其他情况退出,那么这些数据都会丢失。如果频道没有订阅者,那么被发到频道上的消息将会丢失。所以Redis并没有保证消息投递的可靠性。
总之,Redis的PubSub功能并不适合重要消息的投递场景。
网页扫描二维码库:Html5-Qrcode,官网地址:https://scanapp.org/html5-qrcode-docs/
python多维数组为一维数组(reshape、flatten、ravel),使用NumPy库.
快速生成表格
Electron页面跳转、浏览器打开链接和打开新窗口
Docker编译镜像出现:fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.12/main: temporary error (try again later)
WARNING: Ignoring APKINDEX.2c4ac24e.tar.gz: No such file or directory问题
在Mac电脑中,如何对Git的用户名和密码进行修改呢?起初不懂Mac,所以整了很久,本文将记录如何对这个进行操作,以便后期使用。
在使用Git的过程中,不想每次都输入用户名和密码去拉取代码,所以就需要保存这些信息,那么既然有保存了,就必须有清除功能。