gpt4 book ai didi

node.js - 我如何使用 Redis 在 Node worker 之间共享缓存?

转载 作者:可可西里 更新时间:2023-11-01 11:22:12 24 4
gpt4 key购买 nike

如果这是一个非常愚蠢的问题,请原谅我。在过去的一个小时里,我一直在谷歌搜索,但似乎在任何地方都找不到答案。

我们的应用程序需要每隔一小时左右查询一次 CMS 数据库,以更新所有非用户特定的 CMS 内容。我想将该数据存储在一个地方并让所有工作人员都可以访问它 - 每个工作人员都必须每小时调用一次 API。我也希望这个缓存在 Node 工作程序崩溃的情况下持续存在。由于我们对这里的 Node 还很陌生,我预测我们可能会有一些。

我会处理所有的缓存过期逻辑。我只想要一个可以在用户之间共享的商店,可以处理工作人员崩溃和重新启动,并且在应用程序级别 - 而不是用户级别。所以用户 session 对此没有好处。

Redis 是我正在寻找的吗?遗憾的是,为这个版本在我们的 web 层上安装 mongo 可能为时已晚。 Pub/sub 看起来很有前途,但实际上它似乎是为消息传递而设计的——而不是共享缓存。也许我读错了。

非常感谢堆栈溢出!我已经注册了,我保证要做一个好公民。

最佳答案

Redis 是您问题的绝佳解决方案。不确定你为什么要考虑发布/订阅。听起来好像不需要在更新缓存时通知工作人员,他们只需要能够读取写入缓存的最新值即可。您可以在 Redis 中使用一个简单的字符串值来存储在一个一致的键下。

总而言之,您会有一个每小时更新一次 Redis key (例如,cms-cache-stuff)的进程。每次需要缓存信息时,每个需要该数据的工作人员都将从 redis 获取 cms-cache-stuff

此解决方案将在缓存刷新过程崩溃或工作进程崩溃时幸存下来,因为 redis 中的键将始终包含数据(尽管如果刷新过程没有恢复,该数据将过时)。

如果出于某种疯狂的原因你不希望工作人员不断地从 redis 中读取(为什么不呢?它足够快)你仍然可以将最新的缓存数据存储在 cms-cache-stuff 中并且然后通过 pub/sub 向您的工作人员发布一条消息,让他们知道缓存已更新,以便他们可以再次读取 cms-cache-stuff。这为您提供了持久性和恢复性,因为崩溃的工作人员可以在启动时再次读取 cms-cache-stuff,然后开始监听发布/订阅 channel 以获取更多更新。

单独的 Pub/sub 对缓存来说毫无用处,因为它不提供持久性。如果一个 worker 崩溃了并且没有在 channel 上监听,消息就会被简单地丢弃。

关于node.js - 我如何使用 Redis 在 Node worker 之间共享缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20916218/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com