将redis数据移动到MySQL的速度更快的方法

时间:2012-08-17 16:09:00

标签: mysql redis mysqldump

我们有大型购物和产品交易系统。我们遇到了很多MySQL的问题,所以经过一些研发后我们计划使用Redis,我们开始在我们的系统中集成Redis。 现在我们已经移动了Redis系统

,之后直接点击了数据库
  1. 用户购物车详情
  2. 关联企业点击跟踪记录
  3. 我们有产品处理用户数据。
  4. 其他网站统计信息。
  5. 我不仅将数据存储在Redis系统中,而且我已经编写了crons,它会以一定的时间间隔在MySQL数据中移动Redis数据。这是我面临问题的要点。 贝娄点我正在寻找解决方案

    1. 他们还有其他方法可以将大数据从Redis转储到MySQL吗?
    2. Redis使我们的商店数据在文件中失败,所以是否可以将数据直接存储到MySQL数据库?
    3. Redis是否有任何触发系统使用我可以避免像队列系统这样的crons?

1 个答案:

答案 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%的一致性。