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

标签 mysql database architecture redis

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

我的解决方案是:

  1. Redis写入AOF文件,一些进程会监控这个文件并将更新的数据同步到MySQL
  2. Hack Redis 在多个文件中写入 AOF,就像 MySQL binlog
  3. 数据接口(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/

相关文章:

php - 比较运算符 Sql 查询与 php

php - 使用 PHP 显示 MySql 结果(下拉菜单)

mysql - 从 WordPress 中访问第二个本地主机数据库

security - 对于拥有大量 SAP 投资的公司,内部安全标准的最佳实践是什么?

c# - 将WPF与MVVM架构一起使用以创建与要轮询的设备相对应的动态GUI

Mysql DISTINCT 和 ORDER BY 不起作用

mysql - 在 PHP 查询中连接 3 个表

sql - 什么是投影和选择?

php - 使用php将值范围插入mysql数据库

javascript - AngularJS 架构