Infinispan 8 中新的 Redis 快取儲存實現
Infinispan 8 包含了一個新的在 Redis k/v 伺服器中儲存快取資料的 cache store。這個 cache store 可以把快取資料儲存在一個集中的 Redis 中,所有的 Infinispan 客戶端都可以訪問。
Cache store 支援三種 Redis 的部署方式:單伺服器、主從切換(Sentinel)和叢集(需要 Redis 3 支援)。目前支援的 Redis 版本包括 2.8+ 和 3.0+。
資料過期和清理由 Redis 負責,可以減輕 Infinispan 伺服器人工刪除 cache 項的工作量。
拓撲結構
獨立伺服器
對於單伺服器部署,cache store 會指向所連的 Redis 的 master,將其作為資料的儲存。使用這種結構,Redis 是沒有容災功能的,除非在它上面另外再自己構造一個。下面是獨立伺服器的本地cache store 的配置:
<?xml version="1.0" encoding="UTF-8"?> <infinispan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:config:8.0 http://www.infinispan.org/schemas/infinispan-config-8.0.xsd urn:infinispan:config:store:redis:8.0 http://www.infinispan.org/schemas/infinispan-cachestore-redis-config-8.0.xsd" xmlns="urn:infinispan:config:8.0" xmlns:redis="urn:infinispan:config:store:redis:8.0" > <cache-container> <local-cache> <persistence passivation="false"> <redis-store xmlns="urn:infinispan:config:store:redis:8.0" topology="server" socket-timeout="10000" connection-timeout="10000"> <redis-server host="server1" /> <connection-pool min-idle="6" max-idle="10" max-total="20" min-evictable-idle-time="30000" time-between-eviction-runs="30000" /> </redis-store> </persistence> </local-cache> </cache-container> </infinispan>
注意 topology 屬性在這裡是 server。這可以保證 cache store 使用的是獨立的 Redis 伺服器拓撲結構。只需要定義一個 Redis 伺服器(如果定義了多個,只有第一個會被使用),埠會使用 Redis 的預設埠 6379,也可以使用 port 屬性覆蓋埠。所有的連線由一個連線池進行管理,連線池同時還負責連線的建立、釋放、選擇處於空閒的連線。
Sentinel模式
Sentinel 模式依賴於 Redis 的 Sentinel 伺服器,以此來連線到 Redis 的 master。具體來說,Infinispan 連線到 Redis 的 Sentinel 伺服器,請求 master 的名字,然後能獲得正確的 master 伺服器地址。這種拓撲結構通過 Redis Sentinel 提供了可用性,實現了對 Redis 伺服器的失效檢測和自動恢復。
<?xml version="1.0" encoding="UTF-8"?> <infinispan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:config:8.0 http://www.infinispan.org/schemas/infinispan-config-8.0.xsd urn:infinispan:config:store:redis:8.0 http://www.infinispan.org/schemas/infinispan-cachestore-redis-config-8.0.xsd" xmlns="urn:infinispan:config:8.0" xmlns:redis="urn:infinispan:config:store:redis:8.0" > <cache-container> <local-cache> <persistence passivation="false"> <redis-store xmlns="urn:infinispan:config:store:redis:8.0" topology="sentinel" master-name="mymaster" socket-timeout="10000" connection-timeout="10000"> <sentinel-server host="server1" /> <sentinel-server host="server2" /> <sentinel-server host="server3" /> <connection-pool min-idle="6" max-idle="10" max-total="20" min-evictable-idle-time="30000" time-between-eviction-runs="30000" /> </redis-store> </persistence> </local-cache> </cache-container> </infinispan>
對於 Sentinel 模式,topology 屬性需要改成 sentinel。還需要指定 master 的名字,用於選擇正確的 Redis 的 master,因為一個 Sentinel 伺服器可以監控多個 Redis 的 master。需要注意的是,Sentinel 伺服器通過一個叫 sentinel-server 的 XML 標籤來定義,這與單伺服器和叢集都不一樣。如果沒有指定,Sentinel 的預設埠是。至少需要指定一個 Sentinel 伺服器,如果你有多臺Sentinel 伺服器,也可以都加上,這樣可以 Sentinel 伺服器自身也可以實現容災。
叢集
在叢集拓撲結構下,Infinispan 可以連線到一個 Redis 叢集。一個或多個叢集節點可以加到infinispan (越多越好),被用於儲存所有的資料。Redis 叢集支援失效檢測,所以如果叢集裡有master 掛掉了,就會有 slave 提升為 master。Redis 叢集需要 Redis 3。
<?xml version="1.0" encoding="UTF-8"?> <infinispan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:config:8.0 http://www.infinispan.org/schemas/infinispan-config-8.0.xsd urn:infinispan:config:store:redis:8.0 http://www.infinispan.org/schemas/infinispan-cachestore-redis-config-8.0.xsd" xmlns="urn:infinispan:config:8.0" xmlns:redis="urn:infinispan:config:store:redis:8.0" > <cache-container> <local-cache> <persistence passivation="false"> <redis-store xmlns="urn:infinispan:config:store:redis:8.0" topology="cluster" socket-timeout="10000" connection-timeout="10000"> <redis-server host="server1" port="6379" /> <redis-server host="server2" port="6379" /> <redis-server host="server3" port="6379" /> <connection-pool min-idle="6" max-idle="10" max-total="20" min-evictable-idle-time="30000" time-between-eviction-runs="30000" /> </redis-store> </persistence> </local-cache> </cache-container> </infinispan>
對於叢集,topology 屬性必須改成 cluster。必須指定一個或多個 Redis 叢集節點,可以使用 redis-server 標籤來說明。注意如果是操作叢集,不支援 database ID。
一個 Redis 對應多個 Cache Store
Redis 的獨立伺服器模式或者 Sentinel 模式都支援 database ID。一個 database ID 可以讓單個Redis 伺服器支援多個獨立的 database,通過一個整數 ID來區分。這可以讓 Infinispan 在單個Redis 部署上支援多個 cache store,不同的 store 直接的資料可以加以隔離。Redis 叢集不支援database ID。在 redis-store 標籤上可以通過 database 屬性定義 database ID。
<?xml version="1.0" encoding="UTF-8"?> <infinispan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:config:8.0 http://www.infinispan.org/schemas/infinispan-config-8.0.xsd urn:infinispan:config:store:redis:8.0 http://www.infinispan.org/schemas/infinispan-cachestore-redis-config-8.0.xsd" xmlns="urn:infinispan:config:8.0" xmlns:redis="urn:infinispan:config:store:redis:8.0" > <cache-container> <local-cache> <persistence passivation="false"> <redis-store xmlns="urn:infinispan:config:store:redis:8.0" topology="sentinel" master-name="mymaster" socket-timeout="10000" connection-timeout="10000" database="5"> <sentinel-server host="server1" /> <sentinel-server host="server2" /> <sentinel-server host="server3" /> <connection-pool min-idle="6" max-idle="10" max-total="20" min-evictable-idle-time="30000" time-between-eviction-runs="30000" /> </redis-store> </persistence> </local-cache> </cache-container> </infinispan>
Redis的密碼認證
Redis 可選用密碼進行認證,用於增加對伺服器的安全性。這需要在 cache store 連線的時候指定密碼。redis-store 標籤的 password 屬性可以指定這個密碼。
<?xml version="1.0" encoding="UTF-8"?> <infinispan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:config:8.0 http://www.infinispan.org/schemas/infinispan-config-8.0.xsd urn:infinispan:config:store:redis:8.0 http://www.infinispan.org/schemas/infinispan-cachestore-redis-config-8.0.xsd" xmlns="urn:infinispan:config:8.0" xmlns:redis="urn:infinispan:config:store:redis:8.0" > <cache-container> <local-cache> <persistence passivation="false"> <redis-store xmlns="urn:infinispan:config:store:redis:8.0" topology="sentinel" master-name="mymaster" socket-timeout="10000" connection-timeout="10000" password="mysecret"> <sentinel-server host="server1" /> <sentinel-server host="server2" /> <sentinel-server host="server3" /> <connection-pool min-idle="6" max-idle="10" max-total="20" min-evictable-idle-time="30000" time-between-eviction-runs="30000" /> </redis-store> </persistence> </local-cache> </cache-container> </infinispan>
是否有SSL支援?
Redis 沒有提供協議加密,而是將這個留給其他專業的軟體。目前,Infinispan 整合的連線Redis伺服器的 Redis 客戶端(Jedis)還沒有原生的對 SSL 連線的支援。
相關文章
- SpringBoot快取管理(二) 整合Redis快取實現Spring Boot快取Redis
- MySQL與Redis實現二級快取MySqlRedis快取
- 如何用REDIS實現分散式快取Redis分散式快取
- .net8 AOP 實現簡單的Json Redis 快取/業務分離JSONRedis快取
- WEB 應用快取解析以及使用 Redis 實現分散式快取Web快取Redis分散式
- laravel利用Redis來實現網站快取讀取LaravelRedis網站快取
- 持久化儲存與HTTP快取持久化HTTP快取
- Spring Boot 整合 Redis 實現快取操作Spring BootRedis快取
- SpringBoot中使用Redis實現快取Spring BootRedis快取
- 【SpringBoot】結合Redis實現快取Spring BootRedis快取
- Web快取知多少(快取機制和資料儲存)Web快取
- 15.SpringBoot整合Redis快取實現Spring BootRedis快取
- 聊聊如何利用redis實現多級快取同步Redis快取
- Azure Blob儲存更改快取時間快取
- 實現SpringBoot + Redis快取的原始碼與教程Spring BootRedis快取原始碼
- HTTP快取和瀏覽器的本地儲存HTTP快取瀏覽器
- web 的一些基本的快取和儲存Web快取
- 探討下如何更好的使用快取 —— Redis快取的特殊用法以及與本地快取一起構建多級快取的實現快取Redis
- Redis為何這麼快–資料儲存角度Redis
- spring boot使用Jedis整合Redis實現快取(AOP)Spring BootRedis快取
- Redis 6.0 客戶端快取的伺服器端實現Redis客戶端快取伺服器
- Redis的快取穿透、快取雪崩、快取擊穿的區別Redis快取穿透
- Redis快取擊穿、快取穿透、快取雪崩Redis快取穿透
- [Redis]快取穿透/快取擊穿/快取雪崩Redis快取穿透
- 快取工廠之Redis快取快取Redis
- 直播間原始碼,透過Redis實現資料快取原始碼Redis快取
- SpringBoot+Redis實現介面級別快取資訊Spring BootRedis快取
- 記憶體快取系統memcached與redis實現的對比記憶體快取Redis
- 資料快取的實現快取
- 高手如何處理快取:SpringBoot整合Redis實現快取處理(AOP技術)!快取Spring BootRedis
- Redis快取穿透Redis快取穿透
- Android,java,xml,xml讀取與儲存,基於AndroidXML解析與儲存的實現AndroidJavaXML
- redis叢集資料儲存和獲取原理Redis
- Redis快取篇(四)快取異常Redis快取
- Redis資料結構(一)-Redis的資料儲存及String型別的實現Redis資料結構型別
- Redis快取穿透、快取雪崩、redis併發問題分析Redis快取穿透
- Redis儲存結構以及儲存格式Redis
- .NET 9中新快取HybridCache快取