我的解决方案是:
这个解决方案好吗?
那么做这项工作的最佳策略是什么?
答案 0 :(得分:19)
你不需要破解任何东西;)
我不完全确定为什么需要mysql上的数据。如果我知道,也许会有更合适的答案。无论如何,作为一般答案,您可以使用redis keyspace notifications
您可以在密钥上订阅HSET,HMSET,HDEL和DEL命令,这样每次删除密钥或设置或删除哈希值时都会收到通知。
请注意,如果您错过任何通知,则会出现不一致。所以有一段时间你可以使用SCAN命令遍历所有密钥并检查mysql是否需要更新。
另一种策略可能是维持两个独立的结构。一个是具有值的散列,另一个是按更新的时间戳排序的所有值的ZSET。保持两种结构最新的最好方法是编写两个或三个lua脚本(插入/更新和删除),这些脚本将以原子方式对哈希和zset进行操作。
然后,您可以定期查询ZSET,查找时间戳高于上次同步操作的元素,获取所有已更新的密钥(包括已删除的密钥,除非您想为这些密钥保留第二个ZSET)然后只需按键检索所有元素并同步到mysql。
希望它对你有用!
答案 1 :(得分:2)
您可以实施redis replication协议 但是你的要求有github project。
稳定版本为2.5.0
<dependency>
<groupId>com.moilioncircle</groupId>
<artifactId>redis-replicator</artifactId>
<version>2.5.0</version>
</dependency>
答案 2 :(得分:0)
在Redis中更新值时,可以将值放在其他队列中,例如Redis中的List。然后使用Queue中的值并更新Mysql。
如果Redis数据不是太多,只需使用Scheduler将所有数据批量刷新到Mysql。