Redis订阅和发布模式和Redis事务
-------------------Redis订阅和发布模式-------------------
1、概念
Redis 发布订阅(pub/sub)是一种消息通信模式:
发送者(pub)发送消息,
订阅者(sub)接收消息。
Redis 客户端可以订阅任意数量的频道。
2、subscribe channel:订阅个指定频道的信息
3、publish channel message:将信息message 发送到指定的频道channel
4、应用场景
1、今日头条订阅号、微信订阅公众号、新浪微博关注、邮件订阅系统
2、即使通信系统
3、群聊部落系统(微信群)
5、测试实践:微信班级群 class:20170101
1、学生C订阅一个主题叫 :class:20170101
>subscribe class:20170101
2、学生A针对class:20170101主体发送消息,那么所有订阅该主题的用户都能够接收到该数据。
>publish class:20170101 "hello world! I am A"
3、学生B针对class:20170101主体发送消息,那么所有订阅该主题的用户都能够接收到该数据。
>publish class:20170101 "hello world! I am B"
展示学生C接受到的A\B同学发送过来的消息信息
1) "subscribe"
2) "class:20170101"
3) (integer) 1
1) "message"
2) "class:20170101"
3) "hello world! I am A"
1) "message"
2) "class:20170101"
3) "hello word! I am B"
-------------------Redis事务-------------------
1、概念:
redis中的事务是一组命令的集合。事务同命令一样都是redis的最小执行单位,一个事务中的命令要么都执行,要么都不执行。
2、事务的两种属性
1、事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序的执行。事务在执行的过程中,不会被其他客户端发送过来的命令请求所打断。
2、redis事务是原子。原子意味着要么所有的命令都执行,要么都不执行。
3、事务从开始到执行经历的三个阶段
1、开始事务:multi
>multi --- OK
2、命令入队
>set "strOne" "hello"
>set "strTwo" "world"
>set "strThree" "!"
3、执行事务:exec
>exec
4、事务执行是常见错误:
1、语法错误:语法错误指命令不存在或者命令参数的个数不对。
2、运行错误:运行错误指在命令执行时出现的错误,比如使用散列类型的命令操作集合类型的键,这种错误在实际执行之前Redis是无法发现的,所以在事务里这样的命令是会被Redis接受并执行的。如果事务里的一条命令出现了运行错误,事务里其他的命令依然会继续执行。
>multi
>set key 1
>sadd key 2
>set key 3
>exec
1) OK
2) (error) WRONGTYPE Operation against a key holding the wrong kind of value
3) OK
>get key --- "3"
5、watch命令:可以监控一个或多个键,一旦其中一个键被修改(或删除),之后的事务就不会执行。监控一直持续到exec命令(事务中的命令是在exec之后才执行的,所以在multi命令后可以修改watch监控的键值)
>set key 1 --- OK
>watch key --- OK
>set key 2 --- OK
>multi --- OK
>set key 3 --- QUEUED
>exec --- (nil)
>get key --- "2"
def incr($key):
watch $key
$value =GET $key
if not $value:
$value = 0
$value = $value + 1
MULTI
SET $key,$value
resule = EXEC
return resule[0]