node.js - 自定义内存缓存

标签 node.js memcached

假设有一个网络服务:

  • 在服务器集群 (nginx/node.js) 上运行
  • 所有数据都远程存储
  • 必须在 20 毫秒内响应

响应必须读取的数据像这样拆分..

批处理A

  • 数百万个小对象存储在 AWS DynamoDB 中
  • 在随机时间随机更新
  • 只有一致的读取,不能被捕获

批处理B

  • ~2,000 条 SQL 记录
  • 很少更新,记录最大 1KB
  • 最多可以被抓到 60-90 秒

我们无法一次读取所有记录,因为在从 BatchA 读取之前我们不知道要从 BatchB 获取哪些记录。

从 DynamoDB 读取最多需要 10 毫秒。如果我们从远程位置读取 BatchB,这将使我们没有时间进行计算,或者我们已经超时了。

我目前的想法是将所有 BatchB 记录加载到每个 Node 的内存中(只有 ~2MB)。启动时,系统会连接到 SQL 服务器并获取所有记录,然后每 60 或 90 秒更新一次。问题是执行此操作的最佳方法是什么

我可以简单地将它们全部读入 node.js 中的一个变量(数组),然后在 60-90 秒后使用 SetTimeout 更新数组。但是是最好的解决方案吗?

最佳答案

您的解决方案听起来不错。它符合您的需要。去吧。

我建议在从远程位置更新缓存的过程中保留两个缓存副本。在收到 2MB 数据时,您已经获得了数据的部分副本。在完全接收到新数据之前,我会保留旧缓存。

另一种方法是只维护一个缓存集并在每条记录到达时更新它。然而,这更难实现并且容易出错。 (例如,如果在远程位置不再找到记录,您不应该忘记从缓存中删除记录。)这种方法可以节省内存,但我认为 2MB 没什么大不了的。

关于node.js - 自定义内存缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12206318/

相关文章:

node.js - custom_element_apigen:导入纸张数据表到Dart时出错

php - Php 的数据库类(MySQL + MemCached)

memcached - 使用 Java 中的 spymemcached 设置 Amazon ElastiCache

caching - Nginx memcache 缓存和失效

Memcached 一致性哈希和网络分区,如何解决?

javascript - 如何在nodejs中的ejs文件中显示警报

node.js - Mongoose 总是返回一个空数组 NodeJS

java - 在 spring boot 中重新加载/刷新缓存

node.js - 如何检索在 typescript 中构建 [自定义构建系统] 期间传递的命令行参数

node.js - 如何为即时消息系统设计 redis pub/sub?