Existe-t-il un autre moyen de transférer le Big Data de Redis vers MySQL ?
Redis a la possibilité (grâce à bgsave) de générer un dump des données de manière non bloquante et cohérente.
https://github.com/sripathikrishnan/redis-rdb-tools
Vous pouvez utiliser le package bien connu de Sripathi Krishnan pour analyser un fichier de vidage Redis (RDB) en Python et remplir l'instance MySQL hors ligne. Ou vous pouvez convertir le vidage Redis au format JSON et écrire des scripts dans n'importe quel langage pour remplir MySQL.
Cette solution n'est intéressante que si vous souhaitez copier les données complètes de l'instance Redis dans MySQL.
Est-ce que Redis a un système de déclenchement que je peux utiliser pour éviter les crons comme le système de file d'attente ?
Redis n'a pas de concept de déclencheur, mais rien ne vous empêche de publier des événements dans les files d'attente Redis chaque fois que quelque chose doit être copié sur MySQL. Par exemple, au lieu de :
# Add an item to a user shopping cart
RPUSH user:<id>:cart <item>
vous pourriez exécuter :
# Add an item to a user shopping cart
MULTI
RPUSH user:<id>:cart <item>
RPUSH cart_to_mysql <id>:<item>
EXEC
Le bloc MULTI/EXEC le rend atomique et cohérent. Ensuite, il suffit d'écrire un petit démon en attente sur les éléments de la file d'attente cart_to_mysql (à l'aide des commandes BLPOP). Pour chaque élément retiré de la file d'attente, le démon doit récupérer les données pertinentes de Redis et remplir l'instance MySQL.
Redis ne parvient pas à stocker les données dans un fichier. Est-il donc possible de stocker ces données directement dans la base de données MySQL ?
Je ne suis pas sûr de comprendre la question ici. Mais si vous utilisez la solution ci-dessus, la latence entre les mises à jour Redis et les mises à jour MySQL sera assez limitée. Ainsi, si Redis échoue, vous ne perdrez que les toutes dernières opérations (contrairement à une solution basée sur les tâches cron). Il n'est bien sûr pas possible d'avoir une cohérence à 100% dans la propagation des données.