文章转自华为云社区,作者:周杰伦本人;原文链接:https://bbs.huaweicloud.com/blogs/361799
Redis事务与watch指令
Redis事务
watch指令
总结
❤️ 感谢大家
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命令用来监视键,当事务过程中有键被修改的话,这个键对应的监视器就能检测到,然后事务就会提交失败,保证事务一致性。
❤️ 感谢大家
如果你觉得这篇内容对你挺有有帮助的话:
- 欢迎关注我❤️,点赞👍🏻,评论🤤,转发🙏
- 关注盼盼小课堂,定期为你推送好文,还有群聊不定期抽奖活动,可以畅所欲言,与大神们一起交流,一起学习。
- 有不当之处欢迎批评指正。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
2025年2月国产数据库大事记
墨天轮编辑部
956次阅读
2025-03-05 12:27:34
IDC:2024上半年中国分布式事务数据库软件市场规模为1.5亿美元,同比增长18.5%,阿里、腾讯与华为位列前三
通讯员
160次阅读
2025-03-03 10:01:48
379万!佛山市数据资源中心定向采购华为GaussDB数据库
通讯员
112次阅读
2025-03-10 10:28:39
mysql数据库和gaussdb数据库的异同点
小小星月明
54次阅读
2025-03-05 11:37:16
gaussdb高并发truncate导致的锁表?
小小星月明
45次阅读
2025-03-02 16:50:41
GTM-Lite 和 GTM-Free的区别?
小小星月明
31次阅读
2025-03-15 13:54:51
HCS 中SDR服务是什么用的
小小星月明
31次阅读
2025-03-01 17:55:25
华为云的BMS与ECS区别
小小星月明
30次阅读
2025-03-10 11:52:19
【GaussDB每日一贴】aclexplode函数的使用
猪踢库
26次阅读
2025-03-23 20:35:26
GaussDB 控制语句:原理、实践与性能调优
Gauss松鼠会
25次阅读
2025-03-20 14:53:41