Redis的基本事务操作以及Redis实现乐观锁
事务
在我们学习关系型数据库MYSQL的时候,就了解过Mysql的事务的特性(ACID)。
Nosql中redis的单条命令是具备原子性的, 但是在Redis事务中式不具备原子性的!也没有隔离级别的概念!
Redis的事务本质:一组命令的集合!一个事务中的所有命令都会被序列化,在事务执行的过程中,会按照顺序执行!
------队列 set set set 执行--------
Redis事务的特性:一次性,顺序性,排他性!
所有的命令在事务中,并不是之间执行!而是通过发起执行命令的时候才会执行!(通过Exec命令)
Redis的事务:
- 开启事务(multi)
- 命令入列(…)
- 执行事务(exec)
演示Redis事务正常执行!
演示放弃事务(discard):当我们放弃事务的时候,说明入列的命令并没有执行。
演示事务执行失败,这里先要明白两个观点:
1.编译期异常错误,例如java中的编译期错误,我们使用的IDE工具会给你指出错误(说明代码有问题);在Redis的事务中,出现编译期错误(命令行有问题),事务中的所有命令都不会执行!
2.运行时异常错误,例如:1/0;这种错误只会在你执行代码后发现错误;
在Redis的事务中,如果事务队列中的命令存在语法性错误,其他命令是可以正常执行的!(又进一步说明了,Redis的事务不存在原子性!)
编译期异常:
运行时异常:
Redis中的监控(watch)
乐观锁:很乐观,觉得什么时候都不会出现错误,所以一般不会去上锁!
例如:Mybatis-plus框架中的乐观锁插件,两个线程同时间去修改一个公共的数据,在更新数据的时候,我们使用乐观锁插件去判断一下,是否在此期间有人修改过这个数据:
1.获取Version
2.更新时比较Version
Redis监控测试
正常执行成功:
执行失败:
这里就和Mybatis-plus中的乐观锁机制一样,底层会去判断是否有人操作过监控的这个kv,如果发现操作过,那么事务执行失败。
本文地址:https://blog.csdn.net/qq_45979629/article/details/108970482
推荐阅读
-
Redis的基本事务操作以及Redis实现乐观锁
-
redis中事务机制及乐观锁的实现
-
【连载】redis库存操作,分布式锁的四种实现方式[三]--基于Redis watch机制实现分布式锁
-
实现redis中事务机制及乐观锁的方法
-
Redis的装配、使用以及php中扩展redis并实现php操作redis的一个例子
-
Redis的装配、使用以及php中扩展redis并实现php操作redis的一个例子
-
Redis 分布式锁:乐观锁的实现,以秒杀系统为例
-
Redis的基本事务操作以及Redis实现乐观锁
-
实现redis中事务机制及乐观锁的方法
-
【连载】redis库存操作,分布式锁的四种实现方式[三]--基于Redis watch机制实现分布式锁