当前位置:网站首页>Redis事务与watch指令
Redis事务与watch指令
2022-06-26 14:38:00 【华为云】
Redis事务与watch指令
Redis事务
redis的事务是MULTI指令表明敞开事物,敞开业务后客户端发送的EXEC DISCARD WATCH MULTI指令立即履行外,其他指令后会放入业务队列中,然后回来给客户端消息:QUEUE
当客户端向服务器发送EXEC指令的时分,服务器遍历客户端的业务队列,履行保存的一切指令,并把一切的履行结果回来给客户端。
watch指令
watch指令是可以监督多个数据库键,当excc指令履行的时分,假如被监督的数据库键被修正过了,业务履行失利,原理就是redis数据库中有个watched_keys字典,字典键是被watch指令监督的数据库键,值是链表,记录一切监督这个键的客户端信息。
当履行数据库修正的指令的时分会调用touchWatchedKey函数,touchWatchedKey函数中会对修正键的客户端设置CLIENT_DIRTY_CAS标识
// 当key被修正,调用该函数void signalModifiedKey(redisDb *db, robj *key) { touchWatchedKey(db,key);}// Touch 一个 key,假如该key正在被监督,那么客户端会履行EXEC失利void touchWatchedKey(redisDb *db, robj *key) { list *clients; listIter li; listNode *ln; // 假如数据库中没有被监督的key,直接回来 if (dictSize(db->watched_keys) == 0) return; // 找出监督该key的client链表 clients = dictFetchValue(db->watched_keys, key); // 没找到回来 if (!clients) return; /* Mark all the clients watching this key as CLIENT_DIRTY_CAS */ /* Check if we are already watching for this key */ listRewind(clients,&li); // 遍历一切监督该key的client while((ln = listNext(&li))) { client *c = listNodeValue(ln); // 设置CLIENT_DIRTY_CAS标识 c->flags |= CLIENT_DIRTY_CAS; }}然后服务器收到客户端的exec指令时,服务器依据客户端的CLIENT_DIRTY_CAS标识判断,假如有这个标识,说明被修正过了,服务器就会拒绝客户端提交的业务。
总结
这就是redis事务的相关内容,事务开启通过MULTI命令,所有的命令都会进入事务队列中,当执行exec命令的时候,在事务队列中的命令再一起提交,watch命令用来监视键,当事务过程中有键被修改的话,这个键对应的监视器就能检测到,然后事务就会提交失败,保证事务一致性。
️ 感谢大家
如果你觉得这篇内容对你挺有有帮助的话:
- 欢迎关注我️,点赞,评论,转发
- 关注
盼盼小课堂,定期为你推送好文,还有群聊不定期抽奖活动,可以畅所欲言,与大神们一起交流,一起学习。 - 有不当之处欢迎批评指正。
边栏推荐
- Go变量的声明与赋值
- How to mount cloud disks in ECS
- ArcGIS secondary development method - layer related operations (add, modify)
- View touch analysis
- R语言epiDisplay包的dotplot函数通过点图的形式可视化不同区间数据点的频率、使用by参数指定分组参数可视化不同分组的点图分布、使用cex.X.axis参数指定X轴轴刻度数值标签字体的大小
- IP certificate application process of sectigo
- D - Face Produces Unhappiness
- 【雲原生】 ”人人皆可“ 編程的無代碼 iVX 編輯器
- 【使用yarn运行报错】The engine “node“ is incompatible with this module.
- 15 bs对象.节点名称.节点名称.string 获取嵌套节点内容
猜你喜欢
随机推荐
K gold Chef (two conditions, two points and difference)
信息学奥赛一本通 1405:质数的和与积 (思维题)
这才是优美的文件系统挂载方式,亲测有效
Electron
【雲原生】 ”人人皆可“ 編程的無代碼 iVX 編輯器
备战数学建模32-相关性分析2
feil_uVission4左侧工目录消失
What is the ranking of Guosen Securities? Is it safe to open a stock account?
Heap optimization dijkstra/hash table storage node number
Informatics Olympiad all in one 1400: count the number of words (string matching)
Understand the difference and use between jsonarray and jsonobject
'教练,我想打篮球!' —— 给做系统的同学们准备的 AI 学习系列小册
Combat readiness mathematical modeling 31 data interpolation and curve fitting 3
JVM 输出 GC 日志导致 JVM 卡住,我 TM 人傻了
NAACL2022:(代码实践)好的视觉引导促进更好的特征提取,多模态命名实体识别(附源代码下载)...
一篇抄十篇,CVPR Oral被指大量抄袭,大会最后一天曝光!
BM3D in popular language
fileinput.js php,fileinput
Atcoder 238
R语言epiDisplay包的tableStack函数制作统计汇总表格(分组的描述性统计、假设检验等)、不设置by参数计算基础描述性统计信息、指定对于大多数样本负相关的变量进行反序








