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

pen*_*gdu 21 mysql database architecture redis

  1. 用例是使用Redis作为MySQL的本地缓存
  2. MySQL中的数据格式是:单个主键和其他几个字段.不会有db的跨表查询
  3. Redis键是MySQL中的主键,值是包含MySQL中其他字段的哈希
  4. 断电时,不到一分钟的数据丢失是可以接受的.

我的解决方案是:

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

这个解决方案好吗?
什么是做这项工作的最佳策略?

Jav*_*rez 21

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

我不完全确定为什么你需要关于mysql的数据.如果我知道,也许会有更合适的答案.在任何情况下,作为通用答案,您可以使用redis键空间通知

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

请注意,如果您错过任何通知,则会出现不一致.所以有一段时间你可以使用SCAN命令遍历所有密钥并检查mysql是否需要更新.

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

然后,您可以定期查询ZSET,查找时间戳高于上次同步操作的元素,获取所有已更新的密钥(包括已删除的密钥,除非您想为这些密钥专门保留第二个ZSET),然后只需按键检索所有元素并同步到mysql.

希望它对你有用!