mysql - 如何同时更新Redis和MySQL中的数据?

标签 mysql redis persistence storage volatile

我正在构建一个后台服务,它归结为一个非常复杂的队列系统。这个想法是使用 Redis 作为非持久性存储,并有一个按时间间隔运行的 sub/pub 方案。

所有订阅者都将位于负载均衡器之后。这消除了在负载均衡器后面的所有服务器之间维护状态的复杂问题。

但是,这引入了一个新问题......我如何确保非持久性 (Redis) 和持久性 (MySQL) 数据库都由我的应用程序更新?

似乎我被迫优先考虑一个,如果我必须优先考虑一个,我会优先考虑持久性。但是,在那种情况下,如果 MySQL 更新了,Redis 没有更新,并且由于某种原因我失去了与 MySQL 的连接并且无法撤消上次写入,会发生什么情况?

最佳答案

您的问题有两种可能的解决方案:

  1. 执行以下步骤:
    一种。使用 START TRANSACTION
    启动 MySQL 事务 b.运行您的 MySQL 查询 INSERT INTO ...
    C。运行你的 Redis 命令
    d.如果 Redis 命令成功,则使用 COMMIT 语句完成 MySQL 事务,如果命令失败,则使用 ROLLBACK
    使用事务可确保数据在两个存储中保持一致。
  2. 使用 LuaSQL 库 ( https://realtimelogic.com/ba/doc/en/lua/luasql.html ) 为 Redis 编写 LUA 脚本,您将在其中连接到 MySQL,插入数据,然后也向 Redis 发送命令。然后这个 LUA 脚本可以从客户端调用,只需一个命令 EVALEVALSHA

关于mysql - 如何同时更新Redis和MySQL中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42210017/

相关文章:

ios - 重置 Firebase 缓存

php - 使用 Ajax 进行下拉绑定(bind),无需刷新页面

php - 从具有 UserID= :id in php only returns one instance? 的设备 ID 中选择所有 *

MySQL 将 json 对象附加到 json 对象数组

Redis 缓存 - 获取初始超时设置

redis - 从 Apache Beam API 使用 RedisIO 时获取 'ERR EXEC without MULTI'。

c# - DataGrid ASP.net C# 中的中型 Blob

ruby-on-rails - rails : How can I run redis automatically with `rails s`

database - Django 数据库连接池与 psycopg2.pool

SQL:列表字段包含子列表