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

echo編輯整理,歡迎轉載,轉載請聲明文章來源。歡迎添加echo微信(微信號:t2421499075)交流學習。 百戰不敗,依不自稱常勝,百敗不頹,依能奮力前行。——這纔是真正的堪稱強大!!!java


當咱們使用普通方法插入大量數據到Redis的時候,咱們發現,咱們的插入數據並無Redis宣傳的那麼快,號稱有10w吞吐量的Redis爲何會在咱們插入大量的數據的時候很慢呢?這就是本文要作說明的地方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有密碼,那麼咱們上面的代碼須要加一行設置密碼code

jedis.auth("密碼");

作一個有底線的博客主blog

相關文章
相關標籤/搜索