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

PHP*_*ect 5 mysql mysqldump redis

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

  1. 用户购物车详情
  2. 关联企业点击跟踪记录
  3. 我们有产品处理用户数据.
  4. 其他网站统计.

我不仅将数据存储在Redis系统中,而且我已经编写了crons,它可以按时间间隔在MySQL数据中移动Redis数据.这是我面临问题的要点.贝娄点我正在寻找解决方案

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

Did*_*zia 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>
Run Code Online (Sandbox Code Playgroud)

你可以执行:

# Add an item to a user shopping cart
MULTI
RPUSH user:<id>:cart <item>
RPUSH cart_to_mysql <id>:<item>
EXEC
Run Code Online (Sandbox Code Playgroud)

MULTI/EXEC块使其具有原子性和一致性.然后你只需要编写一个小守护进程等待cart_to_mysql队列的项目(使用BLPOP命令).对于每个出列项,守护进程必须从Redis获取相关数据,并填充MySQL实例.

Redis使我们的商店数据在文件中失败,那么是否可以将数据直接存储到MySQL数据库?

我不确定我在这里理解这个问题.但是如果使用上述解决方案,Redis更新和MySQL更新之间的延迟将非常有限.因此,如果Redis失败,您将只会失去最后的操作(与基于cron作业的解决方案相反).当然,不可能在数据传播方面具有100%的一致性.