歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Infinispan 8 中新的 Redis 緩存存儲實現

Infinispan 8 中新的 Redis 緩存存儲實現

日期:2017/2/28 13:57:08   编辑:Linux教程

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 連接的支持。

下面關於Redis的文章您也可能喜歡,不妨參考下:

Ubuntu 14.04下Redis安裝及簡單測試 http://www.linuxidc.com/Linux/2014-05/101544.htm

Redis主從復制基本配置 http://www.linuxidc.com/Linux/2015-03/115610.htm

Redis集群明細文檔 http://www.linuxidc.com/Linux/2013-09/90118.htm

Ubuntu 12.10下安裝Redis(圖文詳解)+ Jedis連接Redis http://www.linuxidc.com/Linux/2013-06/85816.htm

Redis系列-安裝部署維護篇 http://www.linuxidc.com/Linux/2012-12/75627.htm

CentOS 6.3安裝Redis http://www.linuxidc.com/Linux/2012-12/75314.htm

Redis安裝部署學習筆記 http://www.linuxidc.com/Linux/2014-07/104306.htm

Redis配置文件redis.conf 詳解 http://www.linuxidc.com/Linux/2013-11/92524.htm

Infinispan 的詳細介紹:請點這裡
Infinispan 的下載地址:請點這裡

英文原文:New Redis Cache Store Introduced in Infinispan 8

Copyright © Linux教程網 All Rights Reserved