他们还有其他方式将大数据从 Redis 转储到 MySQL 吗?
Redis 有可能(使用 bgsave)以非阻塞和一致的方式生成数据转储。
https://github.com/sripathikrishnan/redis-rdb-tools
您可以使用 Sripathi Krishnan 的知名包在 Python 中解析 redis 转储文件 (RDB),并离线填充 MySQL 实例。或者,您可以将 Redis 转储转换为 JSON 格式,并以您想要填充 MySQL 的任何语言编写脚本。
这个解决方案只有在你想将 Redis 实例的完整数据复制到 MySQL 时才有意义。
Redis 是否有任何触发系统可以用来避免像队列系统这样的 crons?
Redis 没有触发器的概念,但没有什么可以阻止您在每次必须将某些内容复制到 MySQL 时在 Redis 队列中发布事件。例如,而不是:
# Add an item to a user shopping cart
RPUSH user:<id>:cart <item>
你可以执行:
# Add an item to a user shopping cart
MULTI
RPUSH user:<id>:cart <item>
RPUSH cart_to_mysql <id>:<item>
EXEC
MULTI/EXEC 块使其具有原子性和一致性。然后你只需要编写一个等待cart_to_mysql 队列项目的小守护进程(使用BLPOP 命令)。对于每个出队的项目,守护进程必须从 Redis 获取相关数据,并填充 MySQL 实例。
Redis 无法将我们的数据存储在文件中,那么是否可以将这些数据直接存储到 MySQL 数据库中?
我不确定我是否理解这里的问题。但是如果你使用上面的方案,Redis 更新和 MySQL 更新之间的延迟会非常有限。因此,如果 Redis 失败,您只会丢失最后的操作(与基于 cron 作业的解决方案相反)。当然,在数据传播中不可能有 100% 的一致性。