mysql - 如何在 Node.js 应用程序中将数据从 Redis 持久化到 MySQL

标签 mysql node.js redis

正在开发一款应用的新原型(prototype),该应用应该能够在短时间内(例如 20-30 分钟)每分钟处理 20,000 多个传入请求,并将实时结果返回给用户。

示例:我显示一个是/否问题,您应该能够向我们的 API 发布一个带有"is"/“否”的投票,我们的 API 应该处理该投票并返回有关有多少人投了赞成票以及有多少人投了赞成票的实时信息投了反对票。

所有这些请求都需要保存到我们的 MySQL 数据库中。

我不认为直接将那些 20K 请求实时保存到数据库是一个明智的想法,因为这会给数据库带来巨大的负载,尤其是考虑到我们需要实时数据。

所以我的想法是把Redis作为中间层。 API 写入 Redis,Redis 返回实时计数。

但我仍然需要能够持久化数据。是否可以告诉 Redis 在资源空闲时将所有行写入 MySQL?

或者您会建议一种完全不同的方法吗?

我也研究过 RabbitMQ,将所有插入排队并尽可能处理它们,但据我所知这不能返回实时数据

我还没有代码,因为我首先考虑实现它所需的工具。

最佳答案

两种方式都可以使用

1.添加Redis 作为具有持久化选项的中间层。

Redis 提供了不同范围的持久化选项。 如果您根本不使用持久性选项。当 Redis 服务器重启时,所有数据都将丢失。

您可以配置 Redis 在各种事件中保存数据,例如

  • 不时自动
  • 当你手动调用BGSAVE命令时

  • 当redis关闭时

阅读更多关于 Redis Persistence here 的信息.

  1. 您还可以将 RedisRabbitMQ 一起使用。

Redis 向用户显示实时结果。

RabbitMQ 在队列中添加数据并将数据保存到任何数据库。

RabbitMQ 可以处理高峰期的负载。因此所有保存调用都将在队列中。

关于mysql - 如何在 Node.js 应用程序中将数据从 Redis 持久化到 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56424610/

相关文章:

node.js - 为浏览器生成node-xmpp脚本

redis - 在 Redis 中设置计数器的预定义范围

mysql - JOIN id 更好还是保存字符串值更好

java - 在 JOOQ 的 ON DUPLICATE KEY 中返回 id

php - PHP 无法显示图像

javascript - Angular 6 应用程序在本地主机上加载时卡住

javascript - 鼠标悬停时的 JQuery 与 MySQL

javascript - 错误 : connect. 压缩不是函数

redis - 如何在 Redis 主/从设置中引入人工复制滞后?

kubernetes 中的 redis-ha 无法故障转移回 master