Redis05事务

Redis中的事务操作(事务_锁机制_秒杀)

1、Redis的事务定义

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

2、Multi、Exec、discard

  • 从输入Multi命令开始,输入的命令都会依次进入命令队列中,但不会执行,直到输入Exec(类似于mysql中的提交事务)后,Redis会将之前的命令队列中的命令依次执行。
  • 组队过程中可以通过discard(类似于mysql中的回滚事务)来放弃组队。

image.png
测试案例:
image.png

3、事务的错误处理

  • 组队中某个命令出现了报告错误,执行时整个的所有队列都会被取消。

image.png
测试案例:
image.png

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

image.png
测试案例:
image.png

4、为什么要做成事务?

  • 联想一个场景:有很多人有你的账户,同时去参加双十一抢购。

5、事务冲突的问题

5.1、例子
  • 一个请求想给金额减8000
  • 一个请求想给金额减5000
  • 一个请求想给金额减1000

image.png

  • Redis针对上述冲突问题有两种解决方式:悲观锁和乐观锁
5.2、悲观锁

image.png
image.png

5.3、乐观锁

image.png
image.png

  • 例如:抢票就是乐观锁机制,所有人都能抢票,但是只有一个人可以支付成功。
5.4、乐观锁、悲观锁、共享锁、独占锁

image.png

5.5、WATCH key [key …]

image.png
测试案例:
image.png
原理理解:https://blog.csdn.net/neweastsun/article/details/106949294
image.png

  • 我的理解是在使用WATCH命令监视之后,只要这个变量在EXEC命令执行之前修改了(无论是自己修改还是其他客户端修改),都会取消EXEC对于这个变量的执行。
5.6、unwatch
  • 取消WATCH命令对所有key的监视。
  • 如果在执行WATCH命令之后,EXEC命令或DISCARD命令先被执行了的话,那么就不需要再执行UNWATCH了。

6、Redis事务三特性(Redis不支持ACID)

image.png

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值