我正在构建一个后台服务,它归结为一个非常复杂的队列系统。这个想法是使用 Redis 作为非持久性存储,并有一个按时间间隔运行的 sub/pub 方案。
所有订阅者都将位于负载均衡器之后。这消除了在负载均衡器后面的所有服务器之间维护状态的复杂问题。
但是,这引入了一个新问题......我如何确保非持久性 (Redis) 和持久性 (MySQL) 数据库都由我的应用程序更新?
似乎我被迫优先考虑一个,如果我必须优先考虑一个,我会优先考虑持久性。但是,在那种情况下,如果 MySQL 更新了,Redis 没有更新,并且由于某种原因我失去了与 MySQL 的连接并且无法撤消上次写入,会发生什么情况?
最佳答案
您的问题有两种可能的解决方案:
- 执行以下步骤:
一种。使用START TRANSACTION
启动 MySQL 事务 b.运行您的 MySQL 查询INSERT INTO ...
C。运行你的 Redis 命令
d.如果 Redis 命令成功,则使用COMMIT
语句完成 MySQL 事务,如果命令失败,则使用ROLLBACK
使用事务可确保数据在两个存储中保持一致。 - 使用
LuaSQL
库 ( https://realtimelogic.com/ba/doc/en/lua/luasql.html ) 为 Redis 编写LUA
脚本,您将在其中连接到 MySQL,插入数据,然后也向 Redis 发送命令。然后这个 LUA 脚本可以从客户端调用,只需一个命令EVAL
或EVALSHA
关于mysql - 如何同时更新Redis和MySQL中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42210017/