一尘不染

将Redis数据同步到MySQL的最佳策略是什么?

redis

  1. 用例是使用Redis作为MySQL的本地缓存
  2. MySQL中的数据格式为:单个主键和其他几个字段。不会有查询数据库的交叉表
  3. Redis键是MySQL中的主键,值是包含MySQL中其他字段的哈希
  4. 关闭电源后,少于一分钟的数据丢失是可以接受的。

我的解决方案是:

  1. Redis写入AOF文件,某些进程将监视此文件并将更新的数据同步到MySQL
  2. Hack Redis可以在多个文件中写入AOF,就像MySQL Binlog一样
  3. 数据接口只能通过Redis进行读写

这个解决方案可以吗?
从事这项工作的最佳策略是什么?


阅读 639

收藏
2020-06-20

共1个答案

一尘不染

您不需要破解任何东西;)

我不完全确定为什么您需要mysql上的数据。如果我知道,也许会有一个更合适的答案。无论如何,作为通用答案,您可以使用redis键空间通知

您可以在键上订阅命令HSET,HMSET,HDEL和DEL,因此,每次删除键或设置或删除哈希值时,您都会收到通知。

请注意,如果您错过任何通知,则将出现不一致的情况。因此,有时您可以仅使用SCAN命令浏览所有密钥,并检查mysql是否需要更新。

另一个策略可能是维护两个单独的结构。一个是带有值的哈希,另一个是所有值的ZSET,这些值按更新时间戳排序。使两种结构保持最新的最佳方法是编写两个或三个lua脚本(插入/更新和删除),这些脚本可对散列和zset进行原子操作。

然后,您可以定期在ZSET中查询时间戳比上次同步操作高的元素,获取所有已更新的密钥(它将包括已删除的密钥,除非您想专门为它们保留第二个ZSET),然后通过键检索所有元素并同步到mysql。

希望它对您有用!

2020-06-20