Redis事务及发布订阅

Redis的事务能够保证一批原子性的执行,什么是原子性?即所有要么执行,要么不执行。并且在执行过程中不会为其他任何命令提供服务。当Redis重新启动或者加载AOF文件时也会保证事务命令的完整性,体现出其一致性和永久性

Redis事务命令?

multi incr incrby decr decrby exec discard watch unwatch

开启事务后,所有的命令会直接执行吗?

不会,开启事务后所有命令会首先入队而不是直接执行。

什么时候命令会得到执行?

只有显式的提交事务之后才会得到执行

提交用exec,放弃用discard,watch是Redis提供的一种乐观锁机制,watch可以监听多个key,如果已经监听的key在事务开启之前被修改了,那么事务不会被执行,但是注意,一旦事务执行exec或者discard的时候,所有的key会自动unwatch,不论exec与discard是否成功,监视多个key,watch key[key...]

发布订阅命令:

一个客户:subscribe msg1(订阅) ,另一个客户端:publish msg1 helloworld(发布),回到订阅的客户端,观察输出:数组形式,第一项为固定的“message”字符串,第二行为你订阅的channel名称,我们这里为:“msg1”,第三项为消息体,本例中为helloword,还可以发送数组等,eg:publish msg1 [s1,s2,s3...]。

也可以通过通配符订阅多个
PSUBSCRIBE * 订阅所有发布的信息
PSUBSCRIBE test* 订阅所有已test开头的

publish命令执行完毕之后会同步到Redis从服务中,这样如果一个客户端订阅了从服务的channel,在主服务中会向该channel推送消息时候,该客户端也能收到推送消息

取消订阅命令

unsubscribe,如果不指定,该客户端所有的订阅都会被取消 unsubscribe  channel1,channel2  ,  punsubscribe取消所有订阅

查看订阅状态,pubsub channels[pattern],不指定pattern时候,将会返回给该客户端所有的channels列表,

pubsub NUMPAT ,返回模式订阅的个数

原文地址:https://www.cnblogs.com/hetaoyuan/p/12525715.html