Redis 事物、悲观、乐观锁 (详细)

 

1,概论

      事物这东西相信你们都不陌生吧,在学习Spring,Mybatis等框架中,数据库

      只要是涉及到数据存储和修改的,都会有事物的存在,并发

      废话就很少说了下面咱们来简单的介绍下Redis事物以及锁。框架


2,Redis事物简介?

    Redis 事务能够一次执行多个命令, 而且咱们来了解几个重要的知识点:学习

  1. 开启事物后,一切命令都会放入队列当中,当执行EXEC之后才会挨个执行。
  2. 当执行EXEC命令后,若是队列中有命令出错,那么此队列中的所有命令将不会执行(这里有两种可能),后面会举例介绍。
  3. 当事物执行之后,其余客户端提交的命令请求不会插入到事务执行命令序列中。

  事物执行的三个阶段:spa

  • 开始事务。
  • 命令入队。
  • 执行事务。

3,Redis事物(Transaction)命令?

DISCARD 取消事务,放弃执行事务块内的全部命令。
EXEC 执行全部事务块内的命令。
MULTI 开启事物
UNWATCH 取消 WATCH 命令对全部 key 的监视。
WATCH key 监视一个(或多个) key ,若是在事务执行以前这个(或这些) key 被其余命令所改动,那么事务将被打断。

4,Redis事物使用?

  下面咱们来经过几个例子认识下

  1.正常执行

  

  2.放弃事物

     放弃事物,队列里面的命令将不会执行。3d

  

 

 3.全体连坐

   一个命令出错,队列中的所有命令将不会执行。blog

  

  

  4.冤头债主

    这个例子跟上面的差很少,只不过这个例子是执行了之后再报错,他两不一样的地方就是队列

    上面是先知道错误,这个是执行后才知道错误了,举个例子吧,事务

    好比 我要让个人Redis数据数值增一操做,我在控制台执行命令,INCR key 当事物还没执行的时候,字符串

    也就是说这个命令还在队列中,还没执行,它是不知道我这个key究竟是个数值仍是个字符串,

    假设key不是个数值类型那么当执行事物后,这条命令将会报错,其余的命令正常执行。

    

 

   5.WATCH监控

      在了解WATCH监控前咱们先来聊聊乐观锁和悲欢锁,

 

   ①悲观锁:我很悲观,我以为我每次去拿数据的时候都会被人修改,因此我每次拿数据的时候我就会上锁,

       别人想拿这个数据的时候就会block,直到别人拿到锁。传统的关系型数据库里面就会用到不少这种机制,

       好比 行锁,表锁,读锁,写锁等,都是在操做前加上锁,防止多人修改同一条数据。这样的话就成功提升了数据的一致性,下降了并发性。

 

   ②乐观锁:我很乐观,我以为我每次去拿数据的时候别人都不会修改,因此不会上锁,可是我在更新数据的时候,

        我就会判断一下,有没有别人去更新这个数据,这里咱们可使用版本号等机制来实现判断。

        乐观锁适用于多读的应用类型,这样能够提升吞吐量和并发性。

                乐观锁策略:提交版本必须大于记录当前版本才能更新数据

   下面来看看WATCH怎么使用的

  一,无加塞篡改

    我这里就拿个花呗额度来举例,假设个人balance为余额,arrears为欠下的余额,下面这张图为

    无加塞篡改,先监控在开启multi,保证两笔金额变更在同一事物内,一块儿执行。

    

  二,有加塞篡改

      相似于我在修改这个数据的时候,被其余用户已经修改了,已经被加上锁了,我本身就修改不了了,要等被人修改完才可以修改,这跟上面的乐观锁很类似,

        我开启两个控制台,一个用来正常操做,一个用来中途篡改数据。

      WATCH 监视一个(或多个) key ,若是在事务执行以前这个(或这些) key 被其余命令所改动,那么事务将被打断。

      下面咱们来看图.

      

 

我还没执行这些命令以前我根本不知道个人数据已经在被人修改了,当我要修改数据的时候已经被人先改了。

这时候咱们UNWATCH命令就派上用场了,至关于当我修改数据的时候我就把锁加上,修改完成后就把锁解开,让下一我的继续修改数据,

取消 WATCH 命令对全部 key 的监视,一旦咱们执行EXEC之后全部监控锁都会被取消掉。

下面咱们来看图

 


  5,结尾

      后面还会更新如何使用RedisTemplate来操做Redis命令,如何解决Redis穿透/雪崩等。

      文章就写到这里了,若是文章有须要改进的地方请大佬们在评论区里留言,谢谢点评。

相关文章
相关标签/搜索