Redis事务
自带的Multi事务
垃圾
由MULTI, EXEC, DISCARD and WATCH这四个命令配合完成的。
MULTI
即开启事务 然后一条一条的写业务代码 都会塞进Redis队列里面
EXEC
结束并开始按队列顺序执行事务
DISCARD
就是在EXEC取消事务
WATCH
watch用来提前来观察数据,具体来说,它用于监视一个(或多个) key,如果在事务执行之前这个(或这些) key被其他命令所改动,那么事务将被打断。
所以watch命令可以决定事务是执行还是回滚,一般的操作是 :在multi命令之前使用watch命令监控某些键值对,然后使用multi命令开启事务,执行各类对数据结构进行操作的命令,这些命令会进入先入先出队列中。当redis使用exec命令执行事务的时候,首先会比较对被watch的键值对有没有发生变化,如果产生变化回滚事务,而没有变化执行事务中的命令,
无论事务执行与否,最终都会取消执行事务之前的watch命令。
Multi事务具备原子性吗?
不具备,只是通过单线程的特性,让其它操作切不进来。
但是中途如果因为崩溃,或者自己有问题,还是可能只做了一半。
Multi事务的一些问题
1.事务开启后,每个命令其实都是一次调用, 浪费资源;
2.因为这些命令执行之间是有时间的,还需要Watch提前来观察,这也太难用了
3.通常来说失败了会中断后续流程,而Multi失败会继续,
LUA!
Redis是2.6版本通过内嵌支持Lua环境。执行脚本的常用命令为EVAL.
Redis因为是单线程操作,处理过程中,是不会被被打断并切换到其它处理,所以Redis执行Lua,不出异常的情况下,也不会被打断。
操作方法
EVAL "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second
相比于原生的Multi
●可以编写if else这种选择逻辑
●事务中间如果失败,会中断后续执行
●使用方便,开启Lua就可以执行事务,不像Muti还需要Watch来保证执行开始时状态未改变
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhibakgf
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22 -
excel打印预览压线压字怎么办
PHP中文网 06-22