我们有大型购物和产品交易系统。我们遇到了很多MySQL的问题,所以经过一些研发后我们计划使用Redis,我们开始在我们的系统中集成Redis。 现在我们已经移动了Redis系统
,之后直接点击了数据库我不仅将数据存储在Redis系统中,而且我已经编写了crons,它会以一定的时间间隔在MySQL数据中移动Redis数据。这是我面临问题的要点。 贝娄点我正在寻找解决方案
答案 0 :(得分:13)
他们是否可以通过其他方式将大数据从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%的一致性。