概述 Redis 是基於請求/響應協議的 TCP 服務。在客戶端向伺服器發送一個查詢請求後,需要監聽 Socket 的返回結果,該監聽過程一直阻塞,直到伺服器有結果返回。如果一次請求延遲20ms,則多次請求的網路延遲會不斷累加。也就是說,Redis 的性能瓶頸主要體現在網路延遲上 Redis 的管道 ...
概述
Redis 是基於請求/響應協議的 TCP 服務。在客戶端向伺服器發送一個查詢請求後,需要監聽 Socket 的返回結果,該監聽過程一直阻塞,直到伺服器有結果返回。如果一次請求延遲20ms,則多次請求的網路延遲會不斷累加。也就是說,Redis 的性能瓶頸主要體現在網路延遲上
Redis 的管道技術指在服務端未響應時,客戶端可以繼續向服務端發送請求,並最終一次性讀取所有服務端的響應。管道技術能減少客戶端和伺服器交互的次數,將客戶端的請求批量發送給服務端,伺服器針對批量請求分別查詢並統一回覆,顯著提高 Redis 性能
代碼實現
// Redis Pipeline 執行批量操作,將操作結果返回在 list 中
List<Object> list = redisTemplate.executePipelined(
new RedisCallback<Object>() {
@Nullable
@Override
public Object doInRedis (RedisConnection connection) throws DataAccessException {
// 1:打開 Pipeline
connection.openPipeline();
// 2:執行批量操作
for(int i = 0; i < 10000; i++) {
String key = "key_" + i;
String value = "value_" + i;
connection.set(key.getBytes(), value.getBytes());
}
// 3:結果返回,這裡返回 null,將最終結果彙總在外層的1ist中
return null;
}
});
//5:查看管道批量操作返回的結果
for (Object item : list) {
System.out.println(item);
}