echo編輯整理,歡迎轉載,轉載請聲明文章來源。歡迎添加echo微信(微信號:t2421499075)交流學習。 百戰不敗,依不自稱常勝,百敗不頹,依能奮力前行。——這才是真正的堪稱強大!!!
當我們使用普通方法插入大量數據到Redis的時候,我們發現,我們的插入數據並沒有Redis宣傳的那么快,號稱有10w吞吐量的Redis為什么會在我們插入大量的數據的時候很慢呢?這就是本文要做說明的地方
10w吞吐量,大量插入沒有得到體現?
Redis號稱有10w的吞吐量,但是我們使用普通方法插入的時候,我們發現並沒有達到這樣的數據,主要原因是我們插入的時候多次連接操作,創建連接需要時間,同時,一個連接就會由一個數據包,多個數據包的傳送網絡並不能保證一致,這些都是影響我們大量數據插入性能的。
怎么樣實現打完數據秒級插入?
使用Pipeline
實現代碼如下:
// 在pom依賴中添加jedis依賴
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
// 使用jedis實現pipeline調用
public static void main(String[] args) {
Jedis jedis = new Jedis("192.168.222.135", 6379);
Pipeline pipeline = jedis.pipelined();
long startTime = System.currentTimeMillis();
IntStream.range(0, 1000000).forEach(it -> pipeline.set("batch" + it, it + ""));
pipeline.syncAndReturnAll();
long endTime = System.currentTimeMillis();
System.out.println(endTime - startTime);
}
實測插入速度如下:
實現原理
pipeline其實就是在我們的操作中節省了很多的I/O操作,將我們多個get或者set操作的I/O操作變成一個I/O操作,節省了很多的I/O時間。同時,讓我們的網絡影響I/O數據包傳輸的問題減到最小。
注意
如果我們的redis有密碼,那么我們上面的代碼需要加一行設置密碼
jedis.auth("密碼");
做一個有底線的博客主