在 Mysql 事务之中执行 redis 写缓存,对 Mysql 的性能影响大吗?

2020-02-11 11:18:49 +08:00
 goodspb
如题,想在 Mysql 的事务之中写一个缓存,不知道对 Mysql 性能是否友好,有老铁尝试过吗??

begin trans;

select xxx;

update xxx;

redis.set(xxx);

commit;
1900 次点击
所在节点    问与答
10 条回复
fancy111
2020-02-11 11:25:53 +08:00
骚操作,阻断事务执行。
kn007
2020-02-11 11:38:57 +08:00
建议不要如此操作。
mahone3297
2020-02-11 11:41:35 +08:00
长事务不好
xmh51
2020-02-11 11:47:26 +08:00
事务回滚了 redis 怎么办?
goodspb
2020-02-11 11:51:22 +08:00
@xmh51 #4 也对,感觉我可以直接忽略这个行为了
goodspb
2020-02-11 11:51:35 +08:00
@mahone3297 #3
@kn007 #2
@fancy111 #1

谢谢谢
whileFalse
2020-02-11 15:43:43 +08:00
正确的做法是 mysql 提交成功之后更新缓存,这样缓存出错的概率较低。
cabing
2020-02-11 15:46:13 +08:00
不能在事务执行成功后放入 redis 吗?
dilu
2020-02-11 16:11:30 +08:00
建议不要这样,除非你是小项目,一天几十个人的那种访问量
但凡是个数据量大的系统你都要考虑一个极端问题,redis 超时会抛出一个异常,导致事务直接失败,但是本来业务应该是成功的
还有就是 redis 写完了但是事务失败了
这些逻辑上的漏洞都考虑清楚
最好的办法是事务完成后写 redis
用的时候从 redis 中取 不存在再从数据库取
NeinChn
2020-02-11 16:16:49 +08:00
直接提交事务后,通过 binlog 得到消息流,通过回调的方式去更新 Redis 也是一种常用解决方案
有很多类似的基础组件,例如 linkedin 的 databus,阿里 canal

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/643667

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX