天天看點

Redisson官方文檔 - 14. 第三方架構整合

Redisson不僅完美地支援運作在Spring架構下,還提供了和Spring架構的各項特性類似的,以Spring XML的命名空間的方式配置<code>RedissonClient</code>執行個體和它所支援的所有對象和服務。

首先需要做的是向你的Spring XML檔案增加一個Redisson的引用描述:

你可能注意到上面例子裡使用了一個屬性表達式來指定連接配接的位址。這種使用方式是直接通過Spring自身提供的功能來實作的,你隻需要在你的XML檔案中增加一個<code>&lt;context:property-placeholder/&gt;</code>元素标簽即可。如果你希望在項目中使用Spring提供的自動依賴注入功能,請不要忘了同時增加<code>&lt;context:annotation-config/&gt;</code>的元素标簽。

通常情況下在一個應用程式裡建立一個Redisson執行個體就已經能夠滿足正常的使用了,但是在個别的情況下,一個應用程式可能會遇到需要同時連接配接多個不同的Redis環境,這就需要多個Redisson執行個體同時并存。你可以通過定義多個<code>&lt;redisson:client/&gt;</code>元素标簽來實作這個要求:

Redisson執行個體之間是通過它們的<code>id</code>屬性值來區分的,這個值也同時被用來在自動依賴注入時作為<code>qualifier</code>的備選值使用。在<code>name</code>屬性中出現的多個由英文逗号分開的值是作為這個<code>bean</code>的化名的方式來解析的,它們在自動依賴注入時也會被用來作為<code>qualifier</code>的備選值使用。

也可以通過定義一個<code>qualifier</code>元素标簽來明确的指定它的<code>qualifier</code>備選值,但是這個元素标簽不能同時和<code>name</code>屬性共存。

除了定義Redisson執行個體以外,其它Redisson提供的對象和服務也可以通過類似的方式來定義。它們既可以作為<code>&lt;Redisson:client/&gt;</code>的子元素在它的内部申明,和可以在XML檔案的其他地方申明。在外部申明的時候需要指定一個Redisson bean的引用。

代表Redisson對象的XML元素采用了Spring建議的命名法則。它們和Redisson一樣都使用了同樣的命名空間:

同樣的道理,Redisson提供的服務也可以用同樣的方法來擷取:

很明顯在這些服務被申明在一個<code>&lt;redisson:client/&gt;</code>元素标簽的内部時,它的<code>redisson-ref</code>屬性可以略去不用寫。

下面是所有支援的對象和服務的使用範例:

Spring的<code>qualifier</code>元素标簽可以作為子節點被放置在所有上面提到的類型裡。

Redisson提供了将Redis無縫整合到Spring架構的能力。Redisson依照Spring Cache标準提供了基于Redis的Spring緩存實作。 每個緩存(Cache)執行個體都提供了了兩個重要的可配置參數:<code>過期時間(ttl)</code>和<code>最長空閑時間(maxIdleTime)</code>,如果這兩個參數都未指定或值為<code>0</code>,那麼執行個體管理的資料将永久儲存。

配置範例:

Spring Cache也可以通過JSON或YAML配置檔案來配置:

Redisson提供了幾種不同的Spring Cache Manager,按功能可以分為以下兩大類:

本地緩存(Local Cache) 類 -- 本地緩存(Local Cache)也叫就近緩存(Near Cache)。這類Spring Cache的使用主要用于在特定的場景下,映射緩存(MapCache)上的高度頻繁的讀取操作,使網絡通信都被視為瓶頸的情況。Redisson與Redis通信的同時,還将部分資料儲存在本地記憶體裡。這樣的設計的好處是它能将讀取速度提高最多 45倍 。

以下清單是Redisson提供的所有Spring Cache Manager的名稱及其特性:

類名

本地緩存功能

Local Cache

資料分片功能

Sharding

RedissonSpringCacheManager

No

RedissonSpringLocalCachedCacheManager

Yes

RedissonClusteredSpringCacheManager

RedissonSpringClusteredLocalCachedCacheManager

在初始化<code>org.redisson.spring.cache.RedissonSpringLocalCachedCacheManager</code>對象和<code>org.redisson.spring.cache.RedissonSpringClusteredLocalCachedCacheManager</code>對象的時候可以通過<code>LocalCachedMapOptions</code>對象來配置選項。

Redisson為每個Spring緩存執行個體都提供了兩個很重要的參數:<code>ttl</code>和<code>maxIdleTime</code>,當兩個參數設為<code>0</code>或為指定值時,緩存資料将永久保留。

完整的使用範例如下:

也可以通過JSON或YAML配置檔案來設定相關緩存參數:

JSON:

YAML:

以上内容是名叫<code>testMap</code>的Spring緩存執行個體的配置方式。

需要注意的是:<code>localCacheOptions</code>配置執行個體僅适用于<code>org.redisson.spring.cache.RedissonSpringLocalCachedCacheManager</code>類和<code>org.redisson.spring.cache.RedissonSpringClusteredLocalCachedCacheManager</code>類。

Redisson提供了幾種不同的Hibernate Cache Factory,按功能主要分為兩大類:

本地緩存 類 -- 本地緩存(Local Cache)也叫就近緩存(Near Cache)。這類Hibernate Cache的使用主要用于在特定的場景下,映射緩存(MapCache)上的高度頻繁的讀取操作,使網絡通信都被視為瓶頸的情況。Redisson與Redis通信的同時,還将部分資料儲存在本地記憶體裡。這樣的設計的好處是它能将讀取速度提高最多 5倍 。

以下清單是Redisson提供的所有Hibernate Cache Factory的名稱及其特性:

SingletonRedisRegionFactory

LocalCachedRedisRegionFactory

ClusteredRedisRegionFactory

ClusteredLocalCachedRedisRegionFactory

配置範例如下:

hibernate-redis.properties檔案範例:

需要注意的是: <code>redis.localCache.*</code>配置參數僅适用于<code>ClusteredLocalCachedRedisRegionFactory</code>類和<code>LocalCachedRedisRegionFactory</code>類。

以下範例展示了使用Java緩存标準的用法。範例采用了儲存在預設路徑<code>/redisson-jcache.json</code>或<code>/redisson-jcache.yaml</code>下的配置檔案構造執行個體。

也可以采用指定配置檔案路徑的方式構造執行個體:

還可以通過程式化的方式來構造:

甚至可以用Redisson執行個體來構造:

Redisson為Apache Tomcat叢集提供了基于Redis的非黏性會話管理功能。該功能支援Apache Tomcat的6.x、7.x、8.x和9.x版。

使用方法:

<code>readMode</code> - 用來設定讀取會話裡各個屬性的方式。主要分為以下兩種:

<code>MEMORY</code> - 記憶體讀取模式。直接從本地Tomcat中的會話裡讀取。這是預設情況。

<code>REDIS</code> - Redis讀取模式。繞過本地會話資訊,直接從Redis裡讀取。

<code>updateMode</code> - 用來設定更新會話屬性的方式。主要有以下兩種:

<code>DEFAULT</code> - 會話的屬性隻能通過<code>setAttribute</code>方法來儲存到Redis裡。這是預設請況。

<code>AFTER_REQUEST</code> - 再每次請求結束以後進行一次所有屬性全量寫入Redis。

拷貝相應的 兩個 JAR包到指定的<code>TOMCAT_BASE/lib</code>目錄下:

JDK 1.8+适用

<a href="https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&amp;g=org.redisson&amp;a=redisson-all&amp;v=3.6.0&amp;e=jar">redisson-all-3.6.0.jar</a>

Tomcat 6.x适用

Tomcat 7.x适用

Tomcat 8.x适用

Tomcat 9.x适用

JDK 1.6+适用

<a href="https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&amp;g=org.redisson&amp;a=redisson-all&amp;v=2.11.0&amp;e=jar">redisson-all-2.11.0.jar</a>

Redisson還提供了Spring Session會話管理器的實作。

使用方法:

首先請確定<code>spring-session</code>版本号為1.2.2+的依賴已經添加到了您的項目中:

#### Maven

#### Gradle

然後将<code>@EnableRedissonHttpSession</code>注釋和<code>Redisson</code>執行個體添加到Spring的配置裡:

然後提供一個啟動器<code>AbstractHttpSessionApplicationInitializer</code>的擴充就行了:

也可以在JSON格式的配置檔案中添加以下配置參數:

也可以在YAML格式的配置檔案中添加以下配置參數:

<code>redisson.executor-pool-size</code> - [Gauge] 用于展示Executor線程池大小的路徑成本

<code>redisson.netty-pool-size</code> - [Gauge] 用于展示Netty線程池大小的路徑成本

名稱字首格式:<code>redisson.redis.&lt;host&gt;:&lt;port&gt;</code>

<code>status</code> - [Gauge] 用于展示連接配接狀态,連接配接 和 斷開 狀态的值分别為:[connected, disconnected]

<code>type</code> - [Gauge] 用于展示節點類型,主節點 和 從節點 的狀态值分别為:[MASTER, SLAVE]

<code>bytes-read</code> - [Meter] 用于統計從該節點讀取的位元組量

<code>bytes-written</code> - [Meter] 用于統計寫入到該節點的位元組量

<code>connections.active</code> - [Counter] 用于顯示用戶端到該Redis節點的連接配接池目前 正在使用 的連接配接數量

<code>connections.free</code> - [Counter] 用于顯示用戶端到該Redis節點的連接配接池目前 空閑 的連接配接數量

<code>connections.max-pool-size</code> - [Counter] 用于顯示用戶端到該Redis節點的連接配接池大小

<code>connections.total</code> - [Counter] 用于顯示用戶端到該Redis節點的連接配接池目前 所有 的連接配接數量

<code>operations.total</code> - [Meter] 用于統計用戶端到該Redis節點所有 已發送 的指令數量

<code>operations.total-failed</code> - [Meter] 用于統計用戶端到該Redis節點所有 發送失敗 的指令數量

<code>operations.total-successful</code> - [Meter] 用于統計用戶端到該Redis節點所有 發送成功 的指令數量

<code>publish-subscribe-connections.active</code> - [Counter] 用于顯示用戶端到該Redis節點用于訂閱釋出的連接配接池 正在使用 的連接配接數量

<code>publish-subscribe-connections.free</code> - [Counter] 用于顯示用戶端到該Redis節點用于訂閱釋出的連接配接池 空閑 的連接配接數量

<code>publish-subscribe-connections.max-pool-size</code> - [Counter] 用于顯示用戶端到該Redis節點用于訂閱釋出的連接配接池大小

<code>publish-subscribe-connections.total</code> - [Counter] 用于顯示用戶端到該Redis節點用于訂閱釋出的連接配接池 所有 的連接配接數量

名稱字首格式:<code>redisson.remote-service.&lt;name&gt;</code>

<code>invocations.total</code> - [Meter] 用于統計該遠端服務對象所有 已執行 的請求數量

<code>invocations.total-failed</code> - [Meter] 用于統計該遠端服務對象 執行失敗 的請求數量

<code>invocations.total-successful</code> - [Meter] 用于統計該遠端服務對象 執行成功 的請求數量

名稱字首格式:<code>redisson.executor-service.&lt;name&gt;</code>

<code>tasks.submitted</code> - [Meter] 用于統計 已送出 的任務數量

<code>tasks.executed</code> - [Meter] 用于統計 已執行 的任務數量

<code>workers.active</code> - [Gauge] 用于統計 工作中 的任務線程(Workers)數量

<code>workers.free</code> - [Gauge] 用于統計 空閑 的任務線程(Workers)數量

<code>workers.total</code> - [Gauge] 用于統計 所有 的任務線程(Workers)數量

<code>workers.tasks-executed.total</code> - [Meter] 用于統計任務線程(Workers) 已執行 的任務數量

<code>workers.tasks-executed.total-failed</code> - [Meter] 用于統計任務線程(Workers) 執行失敗 的任務數量

<code>workers.tasks-executed.total-successful</code> - [Meter] 用于統計任務線程(Workers) 執行成功 的任務數量

名稱字首:<code>redisson.map.&lt;name&gt;</code>

<code>hits</code> - [Meter] 用于統計 Redis命中(Redis内 有 需要的資料)的次數

<code>misses</code> - [Meter] 用于統計 Redis未命中(Redis内 沒有 需要的資料)的次數

<code>puts</code> - [Meter] 用于統計 寫入 操作次數

<code>removals</code> - [Meter] 用于統計 擦除 操作次數

名稱字首:<code>redisson.map-cache.&lt;name&gt;</code>

名稱字首:<code>redisson.clustered-map-cache.&lt;name&gt;</code>

<code>misses</code> - [Meter] 用于統計 Redis命中(Redis内 沒有 需要的資料)的次數

名稱字首:<code>redisson.local-cached-map.&lt;name&gt;</code>

<code>local-cache.hits</code> - [Meter] 用于統計 本地命中(JVM内 有 需要的資料)的次數

<code>local-cache.misses</code> - [Meter] 用于統計 本地未命中(Redis内 沒有 需要的資料)的次數

<code>local-cache.evictions</code> - [Meter] 用于統計 驅逐 發生次數

<code>local-cache.size</code> - [Gauge] 用于統計 本地緩存 的容量大小

名稱字首:<code>redisson.clustered-local-cached-map.&lt;name&gt;</code>

名稱字首:<code>redisson.local-cached-map-cache.&lt;name&gt;</code>

名稱字首:<code>redisson.clustered-local-cached-map-cache.&lt;name&gt;</code>

名稱字首:<code>redisson.topic.&lt;name&gt;</code>

<code>messages-sent</code> - [Meter] 用于統計向該話題 發送 出的消息數量

<code>messages-received</code> - [Meter] 用于統計從該話題 接收 到的消息數量

名稱字首:<code>redisson.bucket.&lt;name&gt;</code>

<code>gets</code> - [Meter] 用于該統計分布式通用對象桶 讀取 操作的次數

<code>sets</code> - [Meter] 用于該統計分布式通用對象桶 寫入 操作的次數