如题,想在 Mysql 的事务之中写一个缓存,不知道对 Mysql 性能是否友好,有老铁尝试过吗??
begin trans;
select xxx;
update xxx;
redis.set(xxx);
commit;
begin trans;
select xxx;
update xxx;
redis.set(xxx);
commit;
1
fancy111 Feb 11, 2020
骚操作,阻断事务执行。
|
2
kn007 Feb 11, 2020
建议不要如此操作。
|
3
mahone3297 Feb 11, 2020
长事务不好
|
4
xmh51 Feb 11, 2020
事务回滚了 redis 怎么办?
|
6
goodspb OP |
7
whileFalse Feb 11, 2020
正确的做法是 mysql 提交成功之后更新缓存,这样缓存出错的概率较低。
|
8
cabing Feb 11, 2020
不能在事务执行成功后放入 redis 吗?
|
9
dilu Feb 11, 2020
建议不要这样,除非你是小项目,一天几十个人的那种访问量
但凡是个数据量大的系统你都要考虑一个极端问题,redis 超时会抛出一个异常,导致事务直接失败,但是本来业务应该是成功的 还有就是 redis 写完了但是事务失败了 这些逻辑上的漏洞都考虑清楚 最好的办法是事务完成后写 redis 用的时候从 redis 中取 不存在再从数据库取 |
10
NeinChn Feb 11, 2020
直接提交事务后,通过 binlog 得到消息流,通过回调的方式去更新 Redis 也是一种常用解决方案
有很多类似的基础组件,例如 linkedin 的 databus,阿里 canal |