【发布时间】:2020-04-18 17:50:28
【问题描述】:
我正在使用节点缓存来创建本地缓存,但是,我遇到的问题是,当使用带有 PM2 的应用程序来创建应用程序集群时,缓存会被创建多次,每个进程一个 - 这不是问题太大了,因为缓存的数据很小,所以内存不是问题。
真正的问题是我有一个 API 调用我的应用程序来刷新缓存,但是当调用这个 API 时,它只会刷新处理该调用的特定进程的缓存。
有没有办法向所有工作人员发出信号以执行一项功能?
我确实考虑过使用 Redis 来缓存,因为这样可以更简单地只拥有一个缓存,我对 Redis 的问题是我不确定扩展它的最佳方式,我目前有 50应用程序并且不想为每个应用程序设置一个新的 Redis 数据库,替代方法是使用 ioredis 并且它是每个应用程序的透明密钥前缀,但是如果一个应用程序意外读取数据,这可能会导致一些安全漏洞其他客户端应用程序 - 我不相信有一种方法可以删除特定前缀(即一个应用程序/客户端)的所有键,因为 FLUSHALL 将删除所有键
为集群节点实例共享缓存的最佳实践是什么,但应用程序的实例也很多 - 想想 SAAS 应用程序。
目前,我针对此问题的解决方法是使用 node-cron 每 15 分钟清除一次缓存,但是,缓存中的某些项目实际上永远不会更改,并且还有其他项目应尽快更新外部工具通过 API 调用通知应用程序刷新缓存
【问题讨论】:
-
michal pavlik 发布了一个Answer 说“你可以试试这个可以在进程中存储数据的包:npmjs.com/package/pm2-cluster-cache”
标签: node.js caching redis pm2 node-cluster