03.02 最強 Java Redis 客戶端


最強 Java Redis 客戶端


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

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

緩存是讓分佈式應用程序加速的重要技術之一。存儲的信息越接近 CPU,訪問速度就越快。從 CPU 緩存中加載數據比從 RAM 中加載要快得多,比從硬盤或網絡上加載要快得多得多。

要存儲經常訪問的數據,分佈式應用程序需要在多臺機器中維護緩存。分佈式緩存是降低分佈式應用程序延遲、提高併發性和可伸縮性的一種重要策略。

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

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

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


最強 Java Redis 客戶端


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 對象:

RMapCache<string> map = redisson.getMapCache("anyMap");/<string>


map.put("key1", new SomeObject(), 10, TimeUnit.MINUTES, 10, TimeUnit.SECONDS);


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

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

map.destroy();

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


最強 Java Redis 客戶端


3. Spring Cache

Spring 是一個用於構建企業級 Web 應用程序的 Java 框架,也提供了緩存支持。

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

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

@Configuration


@ComponentScan


@EnableCaching


public static class Application {


@Bean(destroyMethod="shutdown")


RedissonClient redisson() throws IOException {


Config config = new Config();


config.useClusterServers()


.addNodeAddress("127.0.0.1:7004", "127.0.0.1:7001");


return Redisson.create(config);


}


@Bean


CacheManager cacheManager(RedissonClient redissonClient) {


Map<string> config = new HashMap<string>();/<string>/<string>


// 新建 "testMap" 緩存:ttl=24分鐘,maxIdleTime=12分鐘


config.put("testMap", new CacheConfig(24*60*1000, 12*60*1000));


return new RedissonSpringCacheManager(redissonClient, config);


}


}


此外,還可以讀取 JSON 或 YAML 文件配置 RedissonSpringCacheManager。

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

4. JCache

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

Redisson 提供了 Redis 的 JCache API 實現。下面是在 Redisson 中使用默認配置調用 JCache API 的示例:

MutableConfiguration<string> config = new MutableConfiguration<>();/<string>


CacheManager manager = Caching.getCachingProvider().getCacheManager();


Cache<string> cache = manager.createCache("namedCache", config);/<string>


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

MutableConfiguration<string> jcacheConfig = new MutableConfiguration<>();/<string>


Config redissonCfg = ...


Configuration<string> config = RedissonConfiguration.fromConfig(redissonCfg, jcacheConfig);/<string>


CacheManager manager = Caching.getCachingProvider().getCacheManager();


Cache<string> cache = manager.createCache("namedCache", config);/<string>


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

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


最強 Java Redis 客戶端


所謂技多不壓身,我們所讀過的每一本書,所學過的每一門語言,在未來指不定都能給我們意想不到的回饋呢。其實做為一個開發者,有一個學習的氛圍跟一個交流圈子特別重要這裡我推薦一個Java學習交流群私信小編獲得進群資料,不管你是小白還是大牛歡迎入駐,大家一起交流成長


分享到:


相關文章: