Redis實戰--使用Jedis實現百萬數據秒級插入


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("密碼");

做一個有底線的博客主


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM