我的用法是:
我有应用程序引擎NodeJS后端的X个实例。我使用作为缓存层。为了最小化Redis的使用,并添加性能,每个后端实例还具有自己的本地缓存。
规则是这样的,当请求进入后端实例时:
的数据更新本地缓存
本地缓存超时比Redis缓存快得多,但我仍然希望能够向所有实例发送“清除缓存”消息。
整个程序运行得非常好,但是我希望能够通过发送一个pub/sub消息来更新本地缓存,然后所有后端实例都会接收到该消息,从而清除本地缓存。
是的,我可以选择不使用本地缓存,只使用Redis MemoryStore,但这意味着每个Redis查找的网络流量、响应速度较慢以及更多的Redis资源使用。
这是可能的,还是每个被推送的消息只有一个接收器?我知道接收方可以选择不对消息进行攻击,但是如何确保所有实例都已收到,以及如何知道已经发生了什么,所以ack可以由最后一个实例发送?似乎不可能
发布于 2022-11-21 08:32:27
您的用例是不常见的,但是IMO,您有两个解决方案:
在redis中放置一个清晰的缓存日期时间。对于每个请求,App实例调用明确的缓存日期时间。如果本地值(以前的清除缓存值,或者如果没有先例调用(新实例情况)为null )在Redis值后面,则清除本地缓存。否则继续
(不是我想要的)当实例启动时,在PubSub主题上创建一个请求订阅。把信息拉出来。当您收到一个时,清除缓存。
使用PubSub时,当您在主题中发布消息时,它将在所有订阅中重复。使用该模式,所有实例都将有一个订阅,并可以接收消息。
但是,您可以达到订阅配额的数量。若要限制此值,请将过期值设置为1天,以便在没有任何订阅服务器的情况下,在1天后自动清除订阅。
不确定App实例上是否有删除通知,以便让您有时间很好地删除订阅。
https://stackoverflow.com/questions/74510347
复制相似问题