前言
Redis在项目实际开发中,经常会使用到的中间件。作为缓存数据的工具,就必然会有保证数据原子性的问题,那么我们今天就来谈谈Redis的事务吧。
文章主体脉络:
Redis事务要解决的问题?→Redis事务的简单使用→使用会引发的问题→如何解决这个问题:watch→watch的实现机制→事务会引发的问题。
注意事项(必读)
- 题目是五分钟读完,不是五分钟学会。
- 笔者希望各位读者(无论自认为是大佬或小白)能够对文章提出问题或指出错误,笔者一定会跟进进行问题的解答,错误之处笔者会继续学习,完善本文内容。望各位不吝赐教。
- 如果没有自己问题和建议,那么我建议你不要看这篇文章,对你来说只有输入知识,没有输出,没有任何的学习效果,所以你就不要浪费时间了,去刷个抖音都比假装自己很努力来得强。
- 如果你觉得评论沟通不方便,想问的问题/笔者的观点错误过多,愿意向笔者询问和指正的话,也可以添加笔者微信(o815441)进行探讨,笔者乐意之至。请备注“探讨技术问题”。
Redis为了解决什么问题?
在MySQL和Spring都有进行事务控制的方法。Redis作为缓存,我们操作Redis的数据时在特定场景下也要保证我们操作的命令的ACID属性。那么Redis有提供这样的办法吗?有的。那我们今天就来聊下Redis的事务。
为什么需要Redis事务(问题场景)?
一定要理解Redis的事务要解决什么问题,才能有全局意识,他所有的做法都是为了解决这个问题。
业务系统需要在Redis中设置值,并最终获取数据:
//示例代码
set name "zhangsan";
set age 25;
get name;--希望获取到"张三"
复制代码
按照示例代码,通常我们会发送三个命令给Redis进行数据设置和获取,一般情况下我们可以获取到name=“张三”。
那么请你思考下,这样的请求会不会有问题呢?
恭喜你答对了。会的。我们发现如果在我们命令执行中间,有一个客户B对执行了set “name” “李四”命令。那我们获取到的name值就是“李四”了,与我们预期获取的值不同。
我的天啊,那怎么办?很简单,就是利用Redis的事务进行控制,我们就可以保证获取到name=”张三”。那么Redis的事务应该怎么使用呢?
如何使用Redis的事务机制?
Redis的事务执行分为三个阶段:事务开启、命令入队,事务执行。
先给出一个Redis事务的完整命令:

© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
喜欢就支持一下吧
相关推荐