Redis 事务详细介绍
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
事务
注意Redis单条命令是保证原子性的但是事务不保证原子性
Redis事务没有隔离级别的概念所有的命令在事务中并没有直接被执行只有发起执行命令时才执行
Redis事务本质一组命令的集合一个事务中的所有命令都会被序列化在事务执行过程中会按照顺序执行
Redis的事务流程
- 开启事务
multi
- 命令入队
其他命令
- 执行事务
exec
正常执行事务
取消事务
discard
异常执行
1. 编译时出现异常命令写错
整个命令队列都不会执行
2. 运行时出现异常语法错误
报错语句会抛出异常其他语句照样运行
监控 Watch面试常问
乐观锁实现秒杀
- 顾名思义很乐观认为什么时候都不会出现问题所以不会加锁更新数据的时候去判断一下在此期间是否有人修改过这个数据
- 获取version
- 更新的时候比较version
悲观锁
- 顾名思义很悲观认为什么时候都会出现问题无论做什么都会加锁
Redis 实现乐观锁
测试多线程修改值使用 watch 可以当作 Redis 的乐观锁操作
演示
①开启俩个客户端模拟多线程情况
②左边支出20元但是不执行事务然后右边修改money的数值
③左边执行事务发现执行操作返回nil查看money和out发现事务并没有被执行确实有乐观锁的效果
如果修改失败获取最新的值就好exec
、unwatch
、discard
都可以清除连接时所有的监视
小结
- 使用 Redis 实现乐观锁watch 监听某一个 key获取其最新的 value
- 在提交事务时如果 key 的 value 没有发生变化则成功执行
- 在提交事务时如果 key 的 value 发生了变化则无法成功执行