goodspb
V2EX  ›  问与答

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

  •  
  •   goodspb · Feb 11, 2020 · 2594 views
    This topic created in 2458 days ago, the information mentioned may be changed or developed.
    如题,想在 Mysql 的事务之中写一个缓存,不知道对 Mysql 性能是否友好,有老铁尝试过吗??

    begin trans;

    select xxx;

    update xxx;

    redis.set(xxx);

    commit;
    10 replies  •  2020-02-11 16:16:49 +08:00
    fancy111
    fancy111
    Feb 11, 2020
    1
    骚操作,阻断事务执行。
    kn007
    kn007
    Feb 11, 2020
    2
    建议不要如此操作。
    mahone3297
    mahone3297
    Feb 11, 2020
    3
    长事务不好
    xmh51
    xmh51
    Feb 11, 2020
    4
    事务回滚了 redis 怎么办?
    goodspb
    goodspb
    OP
    Feb 11, 2020
    5
    @xmh51 #4 也对,感觉我可以直接忽略这个行为了
    goodspb
    goodspb
    OP
    Feb 11, 2020
    6
    @mahone3297 #3
    @kn007 #2
    @fancy111 #1

    谢谢谢
    whileFalse
    whileFalse
    Feb 11, 2020
    7
    正确的做法是 mysql 提交成功之后更新缓存,这样缓存出错的概率较低。
    cabing
    cabing
    Feb 11, 2020
    8
    不能在事务执行成功后放入 redis 吗?
    dilu
    dilu
    Feb 11, 2020
    9
    建议不要这样,除非你是小项目,一天几十个人的那种访问量
    但凡是个数据量大的系统你都要考虑一个极端问题,redis 超时会抛出一个异常,导致事务直接失败,但是本来业务应该是成功的
    还有就是 redis 写完了但是事务失败了
    这些逻辑上的漏洞都考虑清楚
    最好的办法是事务完成后写 redis
    用的时候从 redis 中取 不存在再从数据库取
    NeinChn
    NeinChn
    Feb 11, 2020
    10
    直接提交事务后,通过 binlog 得到消息流,通过回调的方式去更新 Redis 也是一种常用解决方案
    有很多类似的基础组件,例如 linkedin 的 databus,阿里 canal
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2803 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 14:26 · PVG 22:26 · LAX 06:26 · JFK 09:26
    ♥ Do have faith in what you're doing.