1. 程式人生 > >JedisCluster使用pipeline操作Redis Cluster最詳細從0到1實現過程

JedisCluster使用pipeline操作Redis Cluster最詳細從0到1實現過程

[公眾號文章連結:https://mp.weixin.qq.com/s/6fMsG009RukLW954UUndbw](https://mp.weixin.qq.com/s/6fMsG009RukLW954UUndbw) # 前言 2020年4月30日,Redis 6.0.0正式釋出,標誌著redis從此告別單執行緒。在此之前,在大資料生產環境中使用的是一個30個節點的Codis叢集,SparkStreaming以此作為快取,QPS高峰大概在2000w/s。 因為Codis不再更新迭代,於是在Redis 6.0.6版本釋出的時候搭建了Redis Cluster,新的應用將不再使用Codis。之前連線Codis使用的Java客戶端是Jedis,通過Pipeline方式批次執行命令,以此來提高效率。而Redis Cluster的客戶端JedisCluster沒有提供Pipeline方式,只能單條執行命令,於是開始考慮其他的Java客戶端。 這裡備選了兩個客戶端:**lettuce**和**Redisson** ## pipeline原理 這裡先說一下Jedis的pipeline的原理。通過pipeline對redis的所有操作命令,都會先放到一個List中,當pipeline直接執行或者通過jedis.close()呼叫sync()的時候,所有的命令都會一次性地傳送到客戶端,並且每個操作命令返回一個response,通過get來獲取操作結果。 # lettuce lettuce提供了async非同步方式來實現pipeline的功能,來測試一下是否可按批次處理命令。 測試程式碼: ```java public static void main(String[] args) throws Exception { RedisURI uri = RedisURI.builder() .withHost("47.102.xxx.xxx") .withPassword("Redis6.0.6".toCharArray()) .withPort(10001) .build(); RedisClusterClient client = RedisClusterClient.create(uri); StatefulRedisClusterCo