redis 事务机制

redis中提供了事务处理机制。事务的两个主要特点:

    1.  隔离性  ,事务中的命令都会被序列化,按顺序去执行,不会被外来的请求所打断

   2.  原子性 ,  事务中的所有命令你可以看成是一个整体,要成功则都成功,要失败,则都失败。

开启事务的常规步骤:

第一步:   multi  命令  用来开启事务。  其实此时redis会为当前的连接的redis 客户端开辟一个  队列出来,然后后续的命令就好添加到这个队列中。


第二部:  正常执行我们想要执行的命令,例如:   set  name 'xiaohua'


第三步:  exec  命令 用来提交事务。  此时添加在队列中的所有命令就会真的一条一条去执行。

例子1  -  正常步骤


注释: 

            当开启事务后, 每成功执行一条命令后,返回的值是  ‘queued’  ,  表示入队成功。

扩展:

           redis中的乐观锁   check-add-set  机制  ------------------------  watch

incr  实现模拟  例子
---------------------------------------------------------------------------------------------------------------------
multi
num1 = get num
num1 = num1 + 1
exec

        如果 是当个客户运行上面的例子是没有什么问题的,如果是多个用户的话,那么就会出现并发问题。如果num1  本来是1  , 客户A 运行了上面的代码  变成了  2  ,可是 如何客户B是跟客户A 同时刻运行的,此时  num1  应该  是3  才对, 而不应该是2。 为了解决这种并发问题,redis采用了  check-add-set  这种乐观锁的机制来解决这种原子性的问题。   就是  通过  watch命令去监控一个或者多个键,如果发现它的值发生了变化,那么当前的redis所执行的事务将会取消掉,即通过multi 命令生成的队列,里面装的命令就会清空掉。监控的键是在执行了watch命令后才生效。


取消事务 ----------   discard  命令

注意:   如上图,我们可以看出,当运行  discard  后,得到的结果 不再是  queued  这种入队成功的标识了。而在它之前并在 multi之后的都是  queued  标识。  而  discard  后面设置的命令都是ok, 说明   discard  执行后,  整个事务命令队列就销毁了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • redis事务 Redis 通过 MULTI 、 DISCARD 、 EXEC 和 WATCH 四个命令来实现事务...
    全能程序猿阅读 2,191评论 0 11
  • Redis 通过 MULTI 、 DISCARD 、 EXEC 和 WATCH 四个命令来实现事务功能, 本章首先...
    binge1024阅读 530评论 0 2
  • 本文将从Redis的基本特性入手,通过讲述Redis的数据结构和主要命令对Redis的基本能力进行直观介绍。之后概...
    kelgon阅读 61,334评论 23 625
  • 安全性 设置客户端连接后进行任何其他指令前需要使用的密码。 警告:因为redis 速度相当快,所以在一台比较好的服...
    OzanShareing阅读 1,887评论 1 7
  • 第一次接触桐华的文章是在大一,那句不求有结果,不求她知道,只求在最美的年华里遇见她”让我很是感动,多年后,再读这篇...
    赵瑶岑阅读 425评论 0 1