本站所有文章均为原创,如对您有帮助,恳请帮忙点击任何一处广告
  • 首页
  • Redis
  • Redis教程(十)事务处理与发布订阅

Redis教程(十)事务处理与发布订阅

发布:TangLu2018-4-3 14:42分类: Redis 标签: redis nosql

一、Redis事务处理

Redis服务的事务处理比较简单。只能保证一个客户端发起的事务中的命令的连续执行,中间不会插入其他客户端的命令。客户端执行multi命令时代表开启事务,然后期间执行的命令都会提交到一个队列中,客户端发起exec命令时才会正式执行队列中的命令,如果在事务正式执行前需要取消(比如ATM转账操作一半后执行取消,那么所有工作都被取消),输入discard就可以取消队列中的所有命令

下表是mysql和redis的事务命令对比:

开启事务

start transaction\begin

multi
事务失败回滚 rollback 
discard
提交事务 commit
exec

下图是一个事务提交示例:

redismulit.png

在Redis的事务操作中也有锁机制,用来监视指定的key,如果被监视的key发生过修改,那么事务就不会执行。所使用到的客户端命令是watch在发起muliti事务前先执行watch命令,指定需要监视的key,然后再开启事务进行一系列的数据操作,最后执行exec命令。这个时候watch就会进行一次判断。

注意:Redis对事务的支持是比较简单的,相比MySQL只要事务中有一处地方产生错误,那么整个事务就不会执行,而会进行回滚。Redis没有回滚机制,事务中的操作会按顺序依次执行下去。比如我们的事务队列中第5条操作是对一个字符串进行incr自增(字符串不是数字,无法自增,所以是错误操作),最后执行exec结果会怎么样?会发现其他正确的操作是执行成功了,只有这个错误的自增操作失败了,而这个错误操作之后的数据依然在依次执行。这个是会产生严重后果的,比如账户金额的增减问题,所以一定要注意。


二、Redis发布与订阅

发布订阅是一种消息通信模式,由发送者发送消息,订阅者来接收消息,可以订阅任意数量的频道。工作流程大概就是:当有新消息发送给某频道时,这个消息就会被立即发送给订阅它的客户端们。Redie发布订阅的命令格式如下:

subscribe channel1 [channel2...]  #订阅一个或多个频道
psubscribe pattern1 [pattern2...] #通过通配符形式来订阅多个名称相似的频道
publish channel1 message  #给某频道发布消息


示例:

需要执行订阅的客户端连上Redis服务后,执行订阅命令

subscribe channelname  #这里的channelname就是需要订阅的频道名


需要执行发布的客户端连上Redis服务后,执行发布命令

publish channelname message  #channelname就是发布到的频道,message就是需要发布的内容


这个时候查看所有订阅过该频道的客户端,都会收到对应的消息了,如图:

publish1.png

温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!
et_highlighter51
版权所有:《Linux运维技术学习站点
文章标题:《Redis教程(十)事务处理与发布订阅
除非注明,文章均为 《Linux运维技术学习站点》 原创
转载请注明本文短网址:http://www.linuxe.cn/post-324.html  [生成短网址]

已有 0/1402 人参与

发表评论:

欢迎分享Linux运维技术学习站点

欢迎使用手机扫描访问本站,还可以关注微信哦~