运维开发网

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

运维开发网 https://www.qedev.com 2020-05-27 19:33 出处:网络 作者:运维开发网整理
>用例是使用Redis作为 MySQL的本地缓存 > MySQL中的数据格式是:单个主键和其他几个字段. db不会有查询交叉表 > Redis键是MySQL的主要关键,值是包含MySQL中其他字段的哈希值 >断电时,不到一分钟的数据丢失是可以接受的. 我的解决办法是:   Redis写了一个AOF文件,一些进程将监视该文件并将更新后的数据同步到MySQL > Hack Redis在几个文件中写入A
>用例是使用Redis作为 MySQL的本地缓存

> MySQL中的数据格式是:单个主键和其他几个字段. db不会有查询交叉表

> Redis键是MySQL的主要关键,值是包含MySQL中其他字段的哈希值

>断电时,不到一分钟的数据丢失是可以接受的.

我的解决办法是:

 

Redis写了一个AOF文件,一些进程将监视该文件并将更新后的数据同步到MySQL

> Hack Redis在几个文件中写入AOF,就像MySQL binlog一样

>数据接口只能通过Redis读写

这个解决方案可以吗?

那么做这项工作的最好策略是什么?

你不需要砍任何东西;)

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

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

请注意,如果您错过任何通知,您将会有不一致之处.所以有一段时间你可以使用SCAN命令来查看所有的密钥,并检查mysql是否需要更新.

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

然后,您可以定期向ZSET查询具有高于上一次同步操作的时间戳的元素,获取所有更新的密钥(将包括已删除的密钥,除非您要保留第二个ZSET专用于那些)通过键检索所有元素并同步到mysql.

希望它会为你工作!

0

精彩评论

暂无评论...
验证码 换一张
取 消