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发现事务并没有被执行确实有乐观锁的效果

如果修改失败获取最新的值就好execunwatchdiscard都可以清除连接时所有的监视

小结

  • 使用 Redis 实现乐观锁watch 监听某一个 key获取其最新的 value
    • 在提交事务时如果 key 的 value 没有发生变化则成功执行
    • 在提交事务时如果 key 的 value 发生了变化则无法成功执行

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: redis