JedisCluster使用pipeline操作Redis Cluster最詳細從0到1實現過程
阿新 • • 發佈:2021-01-06
[公眾號文章連結: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