7

我们有大型购物和产品交易系统。我们在使用 MySQL 时遇到了很多问题,所以经过几次研发后,我们计划使用 Redis,并开始将 Redis 集成到我们的系统中。在此之前直接访问数据库之后,现在我们已经移动了 Redis 系统

  1. 用户购物车详情
  2. 关联公司点击跟踪记录
  3. 我们有产品交易用户数据。
  4. 其他网站统计信息。

我不仅将数据存储在 Redis 系统中,我还编写了 crons,它按时间间隔在 MySQL 数据中移动 Redis 数据。这是我面临的主要问题。波纹管点我正在寻找解决方案

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

1 回答 1

15

他们还有其他方式将大数据从 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% 的一致性。

于 2012-08-17T19:48:24.147 回答