Redis-03-事务和乐观锁

3. 事务与乐观锁

3.1 Redis事务

  • 事务的概念
    • 事务本质上就是一组命令一起执行
    • 和传统事务的ACID原则相比,Redis并不保证事务的原子性,同时Redis也没有隔离级别的概念
  • Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:
    • 批量操作在发送 EXEC 命令前被放入队列缓存。
    • 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
    • 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。
  • 一个事务从开始到执行会经历以下三个阶段
    • 开始事务(MULTI)
    • 命令入队
    • 执行事务(EXEC)

PS. 虽然Redis的命令都是原子性的,但是Redis并不保证事务的原子性

3.2 乐观锁

乐观锁与悲观锁

  • 悲观锁
    • 它总是认为获取到的所有数据都是不正确的,所以在获取之前,它会严格的去上锁,依次保证正确性
  • 乐观锁
    • 它是非常乐观的,它认为它拿到的数据都是正确的,所以它在获取的时候不会去申请锁,锁住资源,因此性能非常优秀
    • CAS(Compare And Swap)是乐观锁实现的重要机制。它的核心理念如下
      • 通过版本号来判断获取到的内容是否被修改过

Redis的乐观锁

  • 命令
    • WATCH key,监控key
    • UNWATCH key,放弃监控key
  • 在事务执行完成之后,Redis会自动 UNWATCH
  • 如果在事务执行的时候,被 WATCH 的值发生了改变,那么Redis事务不会执行,并会返回通知消息告知
posted @ 2021-01-30 21:02  PrimaBruceXu  阅读(71)  评论(0编辑  收藏  举报