1. 程式人生 > >Redis嵌入式伺服器,用於Java整合測試

Redis嵌入式伺服器,用於Java整合測試

    

Maven依賴

Maven Central:

< 依賴 >
 < groupId > com.github.kstyrc </ groupId >
 < artifactId > embedded-redis </ artifactId >
 < version > 0.6 </ version >
</ dependency >

以前的版本(0.6之前):

< repository >
 < id > clojars.org </ id >
 < url > http://clojars.org/repo </ url >
</ repository >
...
< 依賴 >
 < groupId > redis.embedded </ groupId >
 < artifactId > embedded-redis </ artifactId >
 < version > 0.5 </ version >
</ dependency >

用法

執行RedisServer非常簡單:

RedisServer redisServer = new RedisServer(6379);
redisServer 。開始();
//做一些工作 
redisServer 。停();

您還可以為RedisServer提供自己的可執行檔案:

// 1)給出顯式檔案(os-independent broken!)
RedisServer redisServer = new RedisServer( “ / path / to / your / redis ”, 6379);
// 2)給定與os無關的矩陣
RedisExecProvider customProvider = RedisExecProvider 。defaultProvider()
 .override(OS 。 UNIX,“ /路徑/到/ UNIX / redis的”)
 .override(OS 。 WINDOWS,建築。 86, “ /路徑/到/窗/ redis的”)
 .override(OS ,視窗,建築, x86_64的,“ /路徑/到/窗/ Redis的”)
 .override(OS 。 MAC_OS_X,建築。 86, “ /路徑/到/ MacOSX的/ redis的”)
 .override(OS 。 MAC_OS_X,建築。 x86_64的,“ /路徑/到/ MacOSX的/ redis的”)
 
RedisServer redisServer = new RedisServer(customProvider,6379);

您還可以使用Fluent API建立RedisServer:

RedisServer redisServer = RedisServer 。建設者()
 .redisExecProvider(customRedisProvider)
 .port(6379)
 .slaveOf(“ locahost ”,6378)
 .configFile(“ / path / to / your / redis.conf ”)
 。建立();

甚至從頭開始建立簡單的redis.conf檔案:

RedisServer redisServer = RedisServer 。建設者()
 .redisExecProvider(customRedisProvider)
 .port(6379)
 .slaveOf(“ locahost ”,6378)
 .setting(“ daemonize no ”)
 .setting(“ appendonly no ”)
 .setting(“ maxheap 128M ”)
 。建立();

設定群集

我們的嵌入式Redis支援帶有Sentinels和主從複製的HA Redis叢集

使用短暫的埠

在臨時埠上使用Redis群集進行簡單的redis整合測試,其設定類似於生產中的設定,如下所示:

Redis嵌入式伺服器,用於Java整合測試

 

檢索埠

上面的示例在臨時埠上啟動Redis群集,稍後您可以使用它cluster.ports(),這將返回群集的所有埠的列表。您還可以使用cluster.sentinelPorts() 或伺服器獲取哨兵埠cluster.serverPorts()。JedisUtilclass包含與Jedis客戶端一起使用的實用程式方法。

使用預定義埠

您還可以在預定義的埠上啟動Redis群集,甚至可以混合使用兩種方法:

public class SomeIntegrationTestThatRequiresRedis {
 private RedisCluster cluster;
 @Before 
 public void setup()丟擲 Exception {
 final List < Integer > sentinels = Arrays 。asList(26739,26912);
 final List < Integer > group1 = Arrays 。asList(6667,6668);
 final List < Integer > group2 = Arrays 。asList(6387,6379);
 //建立一個具有3個標記的 
 群集,仲裁大小為2和3個複製組,每個複製組包含一個主群集和一個從屬群集= RedisCluster 。builder()。sentinelPorts(哨兵)。quorumSize(2)
 .serverPorts(group1)。replicationGroup(“ master1 ”,1)
 .serverPorts(group2)。replicationGroup(“ master2 ”,1)
 .ephemeralServers()。replicationGroup(“ master3 ”,1)
 。建立();
 叢集。開始();
 }
//(...)

上面將建立並啟動一個群集,其中包含埠上的標記26739, 26912,第一個複製組6667, 6668,第二個複製組6387, 6379和臨時埠上的第三個複製組。

Redis版本

當沒有提供所需的redis可執行檔案時,RedisServer執行封裝在jar中的os依賴可執行檔案。目前用途:

  • 對於Linux / Unix,Redis 2.8.19
  • 對於OSX,Redis 2.8.19
  • 對於Windows,Redis 2.8.19:https://github.com/MSOpenTech/redis/releases/t