簡體   English   中英

使用 Guava Cache 在多個服務實例上進行分布式緩存同步

[英]Distributed cache synchronization on multiple service instances using Guava Cache

我在我的服務中使用Guava Cache來緩存數據庫,並且我正在使用 REST 調用來使緩存內容無效/刷新 我的設置包含我的service的 10 個分布式實例的部署。

在多個實例的緩存之間保持同步的最佳實踐是什么? 理想情況下,如果我向 1 個實例發送緩存update REST 調用,那么我希望它在其余 9 個實例上觸發相同的調用。

我想避免使用遠程緩存解決方案來避免額外的 REST 調用和相關的網絡延遲。

如果您不想使用像Redis這樣的分布式緩存系統,那么您正在查看的是在您的服務層中有另一個端點發送/接收來自另一個服務實例的 REST 調用(以及緩存值和緩存元數據)作為一旦緩存失效(驅逐)或 TTL 刷新事件發生更新您的內存 Guava 緩存層。

Guava Cache 與分布式應用程序無關,它的內存中定義為單個 JVM。

如果您需要進行分布式緩存,請考慮:

  1. 使用其他工具(例如 Hazelcast 或Apache Ignite
  2. 使用 Redis - 它會在 Redis 服務上存儲單個數據副本,但查詢速度非常快,盡管不如內存調用快。 但是,如果您使用緩存,則數據可能很少更新但經常被查詢,所以也許您可以將 redis 與一些內存中 map 結合使用 + 向所有實例(pub-sub)發送一條消息,一旦一個實例上的緩存得到更新。 即使在 Redis 中,也有一個 pub sub 可以用於此類工作,或者您可以使用 RabbitMq、ActiveMQ 等消息傳遞系統(如果您已經擁有它們)。
  3. 使用數據庫 + 消息傳遞 - 類似於“2”,但是數據的單個副本將存儲在數據庫中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM