Ma solution est:
Cette solution est-elle correcte?
Et quelle est la meilleure stratégie pour faire ce travail?
Vous n'avez besoin de rien pirater;)
Je ne suis pas tout à fait sûr de savoir pourquoi vous avez besoin des données sur mysql. Si je le savais, il y aurait peut-être une réponse plus appropriée. Dans tous les cas, en tant que réponse générique, vous pouvez utiliser notifications redis d'espaces de clés
Vous pouvez vous abonner aux commandes HSET, HMSET, HDEL et DEL sur vos clés afin de recevoir une notification chaque fois qu'une clé est supprimée ou qu'une valeur de hachage est définie ou supprimée.
Notez que si vous manquez une notification, vous auriez une incohérence. Donc, de temps en temps, vous pouvez simplement utiliser la commande SCAN pour parcourir toutes vos clés et vérifier sur mysql si elles doivent être mises à jour.
Une autre stratégie pourrait consister à maintenir deux structures distinctes. L'un serait le hachage avec les valeurs et l'autre serait un ZSET de toutes les valeurs triées par horodatage de mise à jour. Le meilleur moyen de maintenir les deux structures à jour serait d'écrire deux ou trois scripts lua (insert/update et delete) qui opéreraient de manière atomique sur le hachage et le zset.
Ensuite, vous pouvez simplement interroger périodiquement le ZSET pour les éléments dont l'horodatage est supérieur à votre dernière opération de synchronisation, obtenir toutes les clés mises à jour (elles incluraient les clés supprimées, à moins que vous ne souhaitiez conserver un deuxième ZSET exclusivement pour ces éléments), puis simplement récupérez tous les éléments par clé et synchronisez avec mysql.
J'espère que cela fonctionnera pour vous!
vous pouvez implémenter redis réplication protocol.
mais il y a un github project pour vos demandes.
la version stable est 2.5.0
<dependency>
<groupId>com.moilioncircle</groupId>
<artifactId>redis-replicator</artifactId>
<version>2.5.0</version>
</dependency>
Lorsque vous mettez à jour des valeurs dans Redis, vous pouvez les placer dans une autre "File d'attente", telle que "List in Redis".
Si les données Redis ne sont pas trop nombreuses, utilisez simplement un planificateur pour vider toutes les données par lot dans Mysql.