数据库教程:Redis的基本事务操作以及Redis实现乐观锁

事务在我们学习关系型数据库MYSQL的时候,就了解过Mysql的事务的特性(ACID)。Nosql中redis的单条命令是具备原子性的, 但是在Redis事务中式不具备原子性的!也没有隔离级别的概念!Redis的事务本质:一组命令的集合!一个事务中的所有命令都会被序列化,在事务执行的过程中,会按照顺序执行! ——队列 set set set 执行——–Redis事务的特性:一次性,顺序性,排他性!所有的命令在事务中,并不是之间执行!而是通过发起执行命令的时候才会执


事务

在我们学习关系型数据库MYSQL的时候,就了解过Mysql的事务的特性(ACID)。

Nosql中redis的单条命令是具备原子性的, 但是在Redis事务中式不具备原子性的!也没有隔离级别的概念! 

Redis的事务本质:一组命令的集合!一个事务中的所有命令都会被序列化,在事务执行的过程中,会按照顺序执行!

 ------队列 set  set set 执行-------- 

Redis事务的特性:一次性,顺序性,排他性!

所有的命令在事务中,并不是之间执行!而是通过发起执行命令的时候才会执行!(通过Exec命令)

Redis的事务:

  • 开启事务(multi)
  • 命令入列(…)
  • 执行事务(exec)

演示Redis事务正常执行!

Redis的基本事务操作以及Redis实现乐观锁

演示放弃事务(discard):当我们放弃事务的时候,说明入列的命令并没有执行。

Redis的基本事务操作以及Redis实现乐观锁

演示事务执行失败,这里先要明白两个观点:
1.编译期异常错误,例如java中的编译期错误,我们使用的IDE工具会给你指出错误(说明代码有问题);在Redis的事务中,出现编译期错误(命令行有问题),事务中的所有命令都不会执行!
2.运行时异常错误,例如:1/0;这种错误只会在你执行代码后发现错误;
在Redis的事务中,如果事务队列中的命令存在语法性错误,其他命令是可以正常执行的!(又进一步说明了,Redis的事务不存在原子性!)

编译期异常:
Redis的基本事务操作以及Redis实现乐观锁

运行时异常:
Redis的基本事务操作以及Redis实现乐观锁

Redis中的监控(watch)

乐观锁:很乐观,觉得什么时候都不会出现错误,所以一般不会去上锁!

例如:Mybatis-plus框架中的乐观锁插件,两个线程同时间去修改一个公共的数据,在更新数据的时候,我们使用乐观锁插件去判断一下,是否在此期间有人修改过这个数据:
1.获取Version
2.更新时比较Version

Redis监控测试

正常执行成功:

Redis的基本事务操作以及Redis实现乐观锁执行失败:
Redis的基本事务操作以及Redis实现乐观锁Redis的基本事务操作以及Redis实现乐观锁Redis的基本事务操作以及Redis实现乐观锁

这里就和Mybatis-plus中的乐观锁机制一样,底层会去判断是否有人操作过监控的这个kv,如果发现操作过,那么事务执行失败。

需要了解更多数据库技术:Redis的基本事务操作以及Redis实现乐观锁,都可以关注数据库技术分享栏目—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/dtteaching/814291.html

(0)
上一篇 2021年9月14日
下一篇 2021年9月14日

精彩推荐