基金会网站模板,怎么做淘客专属网站,网站建设截图,微网站做下载链接事务 注意#xff1a;Redis单条命令是保证原子性的#xff1b;但是事务不保证原子性#xff01; Redis事务没有隔离级别的概念#xff0c;所有的命令在事务中#xff0c;并没有直接被执行#xff0c;只有发起执行命令时才执行 Redis事务本质#xff1a;一组命令的集合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 发生了变化则无法成功执行