2012-08-17 91 views
4

我们有大量的购物和产品交易系统。我们在MySQL中遇到了很多问题,所以在我们计划使用Redis之后,我们开始将Redis集成到我们的系统中。 在此之后,之前直接进入数据库,现在我们已经搬进Redis的系统将Redis数据移动到MySQL的更快速的方法

  1. 用户购物车的详细信息
  2. 分支机构跟踪点击次数记录
  3. 我们有产品处理用户数据。
  4. 其他站点统计。

我不仅在Redis系统中存储数据,我还写了在每个时间间隔内将MySQL数据中的Redis数据移动的crons。这是我面临的问题的主要观点。 娄点我期待的解决方案

  1. 是他们的任何其他方式从Redis的大数据转储到MySQL?
  2. Redis使我们的存储数据失败,因此可以将数据直接存储到MySQL数据库中吗?
  3. Redis是否有任何触发系统使用,我可以避免队列系统的克朗?

回答

11

是否有其他方式将大数据从Redis转储到MySQL?

Redis有可能(使用bgsave)以非阻塞和一致的方式生成数据转储。

https://github.com/sripathikrishnan/redis-rdb-tools

你可以使用Sripathi克里希南著名的包解析Python中的Redis的转储文件(RDB),和MySQL实例脱机填充。或者您可以将Redis转储转换为JSON格式,并使用任何您想要填充MySQL的语言编写脚本。

如果您想将Redis实例的完整数据复制到MySQL中,此解决方案仅有趣。

Redis是否有任何可用于避免队列系统的cron的触发系统?

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%的一致性是不可能的。

+0

感谢4即时回复。 redis-rdb-tools看起来不错,让我试试。 – 2012-08-18 06:27:57

相关问题