一起聊聊Redis(3)——Redis快速批量插入大量數據

前言回顧

一起聊聊Redis(1)——Windows使用最新版本Redis的正確姿勢(不瞭解Windows下怎麼部署最新版本Redis的童鞋請參考這篇筆記)

Windows下Redis最新版本高可用複製部署

本節問題

如果有大量的數據,例如幾萬個ID,幾百萬個IP等等,怎麼可以快速的插入到Redis數據庫呢?

普通的Redis客戶端執行大規模插入

然而這不是一個好辦法,因為每次插入命令都會產生round trip的時間,例如我們用Wireshark來監測Redis客戶端和服務端之間在插入數據時的數據往返。我們在客戶端往服務端執行了2個set 的命令,分別是set key0 value0和set key1 value1;如下面截圖所示,你會看到有很多數據的往返,如此類推,在大規模插入的時候,這些round trip將大幅增長,自然影響到插入數據的效率。

一起聊聊Redis(3)——Redis快速批量插入大量數據

用shell腳本測試一下普通客戶端逐條命令插入,在windows下可以用Cygwin來運行

一起聊聊Redis(3)——Redis快速批量插入大量數據

插入1000條命令,用時比較長

Pipe-mode導入數據

1.redis-cli –pipe試著儘可能快的發送數據到服務器,它在讀取數據的同時併發送。

2.發送完所有數據後它就會發送一個特殊的ECHO命令包含20個字符的字符串。通過這隨機字符串來匹配收到的回覆,匹配到了以後就是本次命令都已經完成了。

怎麼使用pipe-mode模式導入數據,很簡單,使用--pipe命令,如下圖所示(windows下面可以使用Cygwin),導入100萬的數據只需要不到一分鐘的時間

一起聊聊Redis(3)——Redis快速批量插入大量數據

通過Wireshark可以看到本次命令數據往返的情況。

一起聊聊Redis(3)——Redis快速批量插入大量數據

C# StackExchange.Redis批量插入數據

用CreateBatch創建一個Batch,才整體提交命令,不然每個命令去setadd是很慢的,用batch這種方法一次插入2W條命令只需要不用0.07秒的時間

一起聊聊Redis(3)——Redis快速批量插入大量數據

本期就聊到這裡,謝謝,哈哈哈


分享到:


相關文章: