Redis事务之乐观锁与悲观锁的理解

redis事务之乐观锁与悲观锁的理解

    • 事务的简介
    • 事务的三个阶段
      • 1.1 Multi
      • 1.2 Exec
      • 1.3 discard
    • 事务的错误处理
    • 事务冲突解决方案:
      • 1. 悲观锁
      • 2. 乐观锁
      • 3. 乐观锁在redis中的应用
    • Redis事务的三个特性
      • 1.1 单独的隔离操作
      • 1.2 没有隔离级别的概念
      • 1.3 不保证原子性

事务的简介

Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化,按顺序的执行,事务在执行过程中,不会被其他客户端发送来的命令请求所打断,redis事务的主要作用是串联多个命令防止别的命令插队

事务的三个阶段

1.1 Multi

开启事务,进入组队阶段

1.2 Exec

执行,开始真正执行队列中的命令

1.3 discard

直接放弃所有命令, 队列取消

事务的错误处理

(1)组队中某某个命令出现了错误,执行时整个的所有队列都会被取消,数据进行回滚

(2) 如果执行阶段某个命令出现错误,则只有报错的命令不会被执行,而其他的命令都会执行,不会回滚

事务冲突解决方案:

1. 悲观锁

悲观锁 pessimistic Lock,顾名思义,就是很悲观,每次取拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到所,传统的关系型数据库里面就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁

2. 乐观锁

optimistic lock : 顾名思义,就是很乐观,每次取拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制,乐观锁适用于多读的应用类型,这样可以提高吞吐量,Redis就是利用这种check-and-set机制实现事务的

3. 乐观锁在redis中的应用

redis中操作:
watch key 监视key,如果版本发生改变, 则取消事务

Redis事务的三个特性

1.1 单独的隔离操作

事务的所有命令都会序列化,按顺序地执行,事务在执行过程中,不会被其他客户端发送来的命令请求所打断

1.2 没有隔离级别的概念

队列中的命令没有提交之前都不会实际被执行,因为事务提交前任何指令都不会被实际执行

1.3 不保证原子性

事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚

你可能感兴趣的:(Redis,redis,乐观锁,悲观锁,事务)