使用Guava cache在多个服务实例上进行分布式缓存同步



我在服务中使用Guava Cache来缓存数据库,并且我使用REST调用来使缓存内容无效/刷新。我的设置包含我的service的10个分布式实例的部署。

在多个实例上的缓存之间保持同步的最佳做法是什么?理想情况下,如果我向1个实例发送缓存updateREST调用,那么我希望它在其余9个实例上触发相同的调用。

我想避免远程缓存解决方案,以避免额外的REST调用和相关的网络延迟。

如果你不想使用像Redis这样的分布式缓存系统,那么你要考虑的是在你的服务层中有另一个端点,一旦发生缓存无效(驱逐(或TTL刷新事件来更新你的内存中Guava缓存层,它就会发送/接收来自另一个服务实例的REST调用(以及缓存值加缓存元数据(。

Guava Cache与分布式应用程序无关,它的内存定义为单个JVM。

如果您需要进行分布式缓存,请考虑:

  1. 使用其他工具(例如Hazelcast或Apache Ignite
  2. 使用Redis-它将在Redis服务上存储一个数据副本,但对它的查询非常快,尽管没有内存调用那么快。然而,如果您使用缓存,数据可能很少更新,但经常被查询,因此,一旦一个实例上的缓存更新,您可以将redis与一些内存映射结合使用,并向所有实例发送消息(pub-sub(。即使在Redis中,也有一个pub-sub可以胜任这种工作,或者你可以使用RabbitMq、ActiveMQ等消息系统,如果你已经有了它们的话
  3. 使用数据库+消息传递-类似于"2",但是数据的单个副本将存储在数据库中

最新更新