天天看點

最強 Java Redis 用戶端

為什麼要在 Java 分布式應用程式中使用緩存?

在提高應用程式速度和性能上,每一毫秒都很重要。根據谷歌的一項研究,假如一個網站在3秒鐘或更短時間内沒有加載成功,會有 53% 的手機使用者會離開。

緩存是讓分布式應用程式加速的重要技術之一。存儲的資訊越接近 CPU,通路速度就越快。從 CPU 緩存中加載資料比從 RAM 中加載要快得多,比從硬碟或網絡上加載要快得多得多。

要存儲經常通路的資料,分布式應用程式需要在多台機器中維護緩存。分布式緩存是降低分布式應用程式延遲、提高并發性和可伸縮性的一種重要政策。

Redis 是一種流行的開源記憶體資料存儲,可用作資料庫、緩存或消息代理。由于是從記憶體而非磁盤加載資料,Redis 比許多傳統的資料庫解決方案更快。

然而,對開發者來說讓 Redis 分布式緩存正确工作是一個巨大挑戰。例如,必須謹慎處理本地緩存失效,即替換或删除緩存條目。每次更新或删除存儲計算機本地緩存中的資訊時,必須更新分布式緩存系統所有計算機記憶體中的緩存。

好消息是,有一些類似 Redisson 這樣的 Redis 架構,可以幫助建構應用程式所需的分布式緩存。下一節将讨論 Redisson 中分布式緩存的三個重要實作:Maps、Spring Cache 和 JCache。

1. Redisson 分布式緩存

Redisson 是一個基于 Redis 的架構,用 Java 實作了一個 Redis 包裝器(wrapper)和接口。Redisson 包含許多常見的 Java 類,例如分布式對象、分布式服務、分布式鎖和同步器,以及分布式集合。正如下面即将介紹的,其中一些接口同時支援分布式緩存和本地緩存。

2. Map

Map 是 Java 最有用的集合之一。Redisson 提供了一個名為 RMap 的 Java Map 實作,支援本地緩存。

如果希望執行多個讀操作或網絡環回(roundtrip),應使用支援本地緩存的 RMap。通過本地存儲 Map 資料,RMap 比不啟用本地緩存時快45倍。通用分布式緩存使用 RMapCache,本地緩存使用 RLocalCachedMap。

Redis 引擎自身能夠執行緩存,不需要在用戶端執行代碼。然而,雖然本地緩存能顯著提高讀取速度,但需要由開發人員維護,并且可能需要一些開發工作。Redisson 為開發人員提供了 RLocalCachedMap 對象,讓本地緩存實作起來更容易。

下面的代碼展示了如何初始化 RMapCache 對象:

上面的代碼将字元串 "key1" 放到 RMapCache 中,并與 SomeObject() 關聯。然後它指定了兩個參數,TTL設為10分鐘、最大空閑時間10秒。

當不再需要時,應銷毀 RMapCache 對象:

Redisson 關閉後不用再做銷毀操作。

3. Spring Cache

Spring 是一個用于建構企業級 Web 應用程式的 Java 架構,也提供了緩存支援。

Redisson 包含了 Spring 緩存功能,提供兩個對象:RedissonSpringCacheManager 和 RedissonSpringLocalCachedCacheManager。RedissonSpringLocalCachedCacheManager 支援本地緩存。

下面是一個 RedissonSpringLocalCachedCacheManager 對象的示例配置:

此外,還可以讀取 JSON 或 YAML 檔案配置 RedissonSpringCacheManager。

與 RMaps 一樣,每個 RedissonSpringCacheManager 執行個體都有兩個重要參數: ttl(生存時間)和 maxIdleTime。如果這些參數設為0或者沒有定義,那麼資料将無限期地保留在緩存中。

4. JCache

JCache 是一個 Java 緩存 API,允許開發人員從緩存臨時存儲、檢索、更新和删除對象。

Redisson 提供了 Redis 的 JCache API 實作。下面是在 Redisson 中使用預設配置調用 JCache API 的示例:

此外,還可以使用自定義配置檔案、Redisson Config 對象或 Redisson RedissonClient 對象配置 JCache。例如,下面的代碼使用自定義 Redisson 配置來調用 JCache:

Redisson 的 JCache 實作已經通過 JCache TCK 的所有測試。你也可以自行驗證。

讓我們愉快地使用緩存吧!

-END-

最強 Java Redis 用戶端

喜歡文章,點個在看 

最強 Java Redis 用戶端

繼續閱讀