- 用例是使用Redis作为MySQL的本地缓存
- MySQL 中的数据格式是:单个主键和多个其他字段。不会有db的跨表查询
- Redis key是MySQL中的主键,value是包含MySQL中其他字段的hash
- 断电时,不到一分钟的数据丢失是可以接受的。
我的解决方案是:
- Redis写入AOF文件,一些进程会监控这个文件并将更新的数据同步到MySQL
- Hack Redis 在多个文件中写入 AOF,就像 MySQL binlog
- 数据接口(interface)只会通过Redis读写
这个解决方案可以吗?
完成这项工作的最佳策略是什么?
最佳答案
你不需要破解任何东西;)
我不完全确定你为什么需要 mysql 上的数据。如果我知道,也许会有更合适的答案。无论如何,作为通用答案,您可以使用 redis keyspace notifications
您可以在您的 key 上订阅 HSET、HMSET、HDEL 和 DEL 命令,这样每次删除 key 或设置或删除哈希值时您都会收到通知。
请注意,如果您错过任何通知,就会出现不一致。因此,偶尔您可以使用 SCAN 命令检查所有 key 并检查 mysql 是否需要更新。
另一种策略可能是维护两个独立的结构。一个是带有值的散列,另一个是按更新时间戳排序的所有值的 ZSET。使这两种结构保持最新的最佳方法是编写两个或三个 lua 脚本(插入/更新和删除),以原子方式对哈希和 zset 进行操作。
然后您可以定期查询 ZSET 以查找时间戳高于上次同步操作的元素,获取所有已更新的 key (它将包括已删除的 key ,除非您想专门为这些元素保留第二个 ZSET)然后只需按键检索所有元素并同步到 mysql。
希望它对你有用!
关于mysql - 将 Redis 数据同步到 MySQL 的最佳策略是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23080557/