天天看點

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 的配置:

注意 topology 屬性在這裡是 server。這可以保證 cache store 使用的是獨立的 redis 伺服器拓撲結構。隻需要定義一個 redis 伺服器(如果定義了多個,隻有第一個會被使用),端口會使用 redis 的預設端口 6379,也可以使用 port 屬性覆寫端口。所有的連接配接由一個連接配接池進行管理,連接配接池同時還負責連接配接的建立、釋放、選擇處于空閑的連接配接。

sentinel 模式依賴于 redis 的 sentinel 伺服器,以此來連接配接到 redis 的 master。具體來說,infinispan 連接配接到 redis 的 sentinel 伺服器,請求 master 的名字,然後能獲得正确的 master 伺服器位址。這種拓撲結構通過 redis sentinel 提供了可用性,實作了對 redis 伺服器的失效檢測和自動恢複。

對于 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。

對于叢集,topology 屬性必須改成 cluster。必須指定一個或多個 redis 叢集節點,可以使用 redis-server 标簽來說明。注意如果是操作叢集,不支援 database id。

redis 的獨立伺服器模式或者 sentinel 模式都支援 database id。一個 database id 可以讓單個redis 伺服器支援多個獨立的 database,通過一個整數 id來區分。這可以讓 infinispan 在單個redis 部署上支援多個 cache store,不同的 store 直接的資料可以加以隔離。redis 叢集不支援database id。在 redis-store 标簽上可以通過 database 屬性定義 database id。

redis 可選用密碼進行認證,用于增加對伺服器的安全性。這需要在 cache store 連接配接的時候指定密碼。redis-store 标簽的 password 屬性可以指定這個密碼。

redis 沒有提供協定加密,而是将這個留給其他專業的軟體。目前,infinispan 內建的連接配接redis伺服器的 redis 用戶端(jedis)還沒有原生的對 ssl 連接配接的支援。

繼續閱讀