阅读 208

Redis的数据应用及扩展之事务

事务

  • 在我们日常工作中,遇到的很多场景都需要介入事务去解决

    • 如日常的转账,购买商品,退款等等一系列的操作

    • 我们来看redis中的事务

    • 我们是存储了a == 1,让a`自增两次,最后将事务执行

image.png

  • 具体过程

    • 首先当我们没执行exec的时候,我们上面的操作都是在redis缓存的一个事务队列中,

    • 当我们执行每次命令的时候,QUEUED就代表进入了队列中

    • 当执行exec才代表真正的执行了这条事务

模拟一次事务失败的过程

  • 首先我们MULTI表示是一个事务

    当所有的命令进入队列中的时候,如果有错误其实是不会回滚的,当get a的时候 a的值仍然是自增后的结果为3

    • a置位1,然后将a自增加一,再将b置为字符串test

    • b自增,这时是错误的,因为字符串是无法自增的

    • 此时再将a自增加一,最后执行exec是报错的

image.png

乐观锁-watch

  • 当我们的业务是对数据更改的复杂,那么我们只能在逻辑业务中进行更改

    • 所以redis提供了watch,会在MULTI之前使用watch盯紧变量,

    • 如果在watch一个变量以后,再对这个变量进行修改那么就会报错(执行事务以后返回的是nil)

    • 如下图所示

image.png

  • 在我们实际业务中,事务一般都放在代码中去维护

    • 如使用springboot的注解去实现事务,而如果维护在redis中是不太稳妥的

    • 因为在代码中我们可以清晰的将事务与业务场景融合,所以在做原子类的业务的时候,尽量都交给框架和逻辑代码去搞定


作者:xiaoff
链接:https://juejin.cn/post/7026879048307441671

 伪原创工具 SEO网站优化  https://www.237it.com/ 


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐