本文共 690 字,大约阅读时间需要 2 分钟。
目录
一、Redis事务操作
Redis事务操作与MySQL事务操作的区别
- redis的事务是基于队列实现的。
- mysql的事务是基于事务日志实现的。
1-1 事务命令
•DISCARD -取消事务,放弃执行事务块内的所有命令。
•EXEC - 执行所有事务块内的命令。
•MULTI - 标记一个事务块的开始。
•UNWATCH - 取消 WATCH 命令对所有 key 的监视。
•WATCH key [key ...] - 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。
二、基于Redis乐观锁实现上锁操作
2-0 乐观锁 and 悲观锁
- 乐观锁 - 不上锁,二者抢占到资源都可以对资源进行操作,以最后操作资源的人的结果为准
- 悲观锁 - 上锁,二者都可抢占资源,以第一个提交事务的人为准,后者提交操作报错。
!!!注意:Redis默认为乐观锁,MySQL默认为悲观锁!!
2-1 Redis 事务实现悲观锁 - 模拟抢票
发布一张票set ticket 1窗口1:watch ticket 监控ticket变化multi 进入事务set ticket 0 修改ticket 1---->0窗口2:watch ticket 监控ticket变化multi 进入事务set ticket 0 设置ticketexec 执行事务窗口1:exec 执行事务 -由于窗口2先提交,窗口2提交则报错
转载地址:http://prlvn.baihongyu.com/