跟我一起学Redis之Redis事务简单了解一下( 二 )
放弃事务
文章插图
【跟我一起学Redis之Redis事务简单了解一下】命令语法错误导致事务执行失败
文章插图
使用WATCH实现乐观锁说到乐观锁 , 就和悲观锁一起简单说说对其的理解:
乐观锁:就是非常乐观 , 做什么事都往好处想; 对于数据库操作 , 就认为每次操作数据的时候都认为别的操作不会修改 , 所以不会加锁 , 而是通过一个类似于版本的字段来标识该数据是否修改过 , 在执行本次操作前先判断是否修改过 , 如果修改过就放弃本次操作重新再来;
悲观锁:就是非常悲观 , 做什么事都觉得不好;对于数据库操作 , 每次操作数据数据都会认为别的操作会修改当前数据 , 所以都要对其进行加锁 , 类似于表锁和行锁 。
WATCH通过监视指定Redis Key , 如果没有改变 , 就执行成功 , 如果发现对应值发生改变 , 事务就会执行失败 , 如下图;
文章插图
那会一直监视指定的Key吗? , 答案当然是不会的 , 以下三种方式可以取消监视:
- 事务执行之后 , 不管是否执行成功还好是失败 , 都会取消对应的监视;
- 当监视的客户端断开连接时 , 也会取消监视;
- 可以手动UNWATCH取消所有Key的监视;
- 一次性按顺序执行多个Redis命令 , 不受其他客户端命令请求影响;
- 事务中的命令要么都执行(命令间执行失败互相不影响) , 要么都不执行(比如中间有命令语法错误);
- 事务执行时 , 不能保证原子性;
- 命令入队每次都需要和服务器进行交互 , 增加带宽;
- 当事务中命令语法使用错误时 , 最终会导致事务执行不成功 , 即事务内所有命令都不执行;
- 当事务中命令知识逻辑错误 , 就比如给字符串做加减乘除操作时 , 只能在执行过程中发现错误 , 这种事务执行中失败的命令不影响其他命令的执行 。
那为什么要说Redis事务呢?
在之前计划写这篇文章的时候 , 和一些朋友简单沟通过 , 大家的确用的不多 , 基本上都是用Lua脚本;但面试会时不时遇到过Redis事务的问题 , 最常见的是Redis中的事务和关系型数据库中的事务有什么区别 , 这是从面试角度出发有这篇文章;
其实Redis 2.6版本之前 , 还不支持Lua脚本时 , Redis事务对于批量按序执行命令的场景也是很用的;就拿当下来说 , 如果一些业务需批量按序执行命令的 , 同样可以使用 , 并非一定要Lua脚本 。 这是从使用角度来说;
最后从学习角度来说 , 既然学Redis , 就应该尽可能地了解的多一点 。下一篇说说持久化 。
作者:Code综艺圈链接:来源:掘金著作权归作者所有 。 商业转载请联系作者获得授权 , 非商业转载请注明出处 。
- 开发自|不妥协不追随 Member’s Mark升级背后的“山姆哲学”
- 计算机学科|机器视觉系统是什么
- 阿尔法|击败李世石的AI公司,又研发出生物版“阿尔法狗”:破解50年生物学难题
- 互联网|政企学界人士西安共议数字经济 产业互联网发展向“西”行
- 高学历|薇娅一夜带货53.2亿,少不了这支高学历团队!
- 教学|机器人教学的目标方案
- 体验|VR\/AR体验、3D打印、机器人“对决”……松江这所中学人工智能创新实验室真的赞
- 手机|这4样物品不要和手机放一起,好多人不知道,别当耳旁风
- 直播从业者|高三老师监考时开直播,面对质疑还振振有词,怕困没有打扰学生
- 跻身|安师大2学科跻身ESI全球前1%!新增的学科是……