Redis的数据应用及扩展之事务
事务
在我们日常工作中,遇到的很多场景都需要介入事务去解决
如日常的转账,购买商品,退款等等一系列的操作
我们来看
redis
中的事务我们是存储了
a == 1,让
a`自增两次,最后将事务执行
具体过程
首先当我们没执行
exec
的时候,我们上面的操作都是在redis
缓存的一个事务队列中,当我们执行每次命令的时候,
QUEUED
就代表进入了队列中当执行
exec
才代表真正的执行了这条事务
模拟一次事务失败的过程
首先我们
MULTI
表示是一个事务当所有的命令进入队列中的时候,如果有错误其实是不会回滚的,当
get a
的时候a
的值仍然是自增后的结果为3
将
a
置位1,然后将a
自增加一,再将b
置为字符串test
将
b
自增,这时是错误的,因为字符串是无法自增的此时再将
a
自增加一,最后执行exec
是报错的
乐观锁-watch
当我们的业务是对数据更改的复杂,那么我们只能在逻辑业务中进行更改
所以
redis
提供了watch
,会在MULTI
之前使用watch
盯紧变量,如果在
watch
一个变量以后,再对这个变量进行修改那么就会报错(执行事务以后返回的是nil
)如下图所示
在我们实际业务中,事务一般都放在代码中去维护
如使用springboot的注解去实现事务,而如果维护在redis中是不太稳妥的
因为在代码中我们可以清晰的将事务与业务场景融合,所以在做原子类的业务的时候,尽量都交给框架和逻辑代码去搞定
作者:xiaoff
链接:https://juejin.cn/post/7026879048307441671
伪原创工具 SEO网站优化 https://www.237it.com/