MySQL資料快速匯入Redis

2021-10-08 01:59:07 字數 2665 閱讀 1174

在之前我們講過mysql批量匯入兩百萬資料,那麼在匯入mysql之後,怎麼能將其快速匯入redis中呢?

其實實際操作是比較簡單的,這裡主要分如下幾步:

首先我們需要登入mysql,找到目標資料

然後我們需要執行相關的sql語句,查詢出想要的結果集

登入連線redis服務

把mysql查詢出的結果集使用pipeline管道匯入redis

mysql -uroot -proot test --default-character-set=utf-8 --skip-column-names --raw < test.sql | redis-cli -h 192.168.80.135 -p 6379 -a root --pipe

這裡我們就來看一看示例,我們在資料庫中新建一張表,其資料結構如下:

主鍵姓名

性別年齡

分數備註

idname

***age

socre

remark

那麼上述命令中的test.sql內容則如下:

select concat(

'*14\r\n'

,'$'

, length(redis_cmd)

,'\r\n'

, redis_cmd,

'\r\n'

,'$'

, length(redis_key)

,'\r\n'

, redis_key,

'\r\n'

,'$'

, length(hkey1)

,'\r\n'

,hkey1,

'\r\n'

,'$'

, length(hval1)

,'\r\n'

,hval1,

'\r\n'

,'$'

, length(hkey2)

,'\r\n'

,hkey2,

'\r\n'

,'$'

, length(hval2)

,'\r\n'

,hval2,

'\r\n'

,'$'

, length(hkey3)

,'\r\n'

,hkey3,

'\r\n'

,'$'

, length(hval3)

,'\r\n'

,hval3,

'\r\n'

,'$'

, length(hkey4)

,'\r\n'

,hkey4,

'\r\n'

,'$'

, length(hval4)

,'\r\n'

,hval4,

'\r\n'

,'$'

, length(hkey5)

,'\r\n'

,hkey5,

'\r\n'

,'$'

, length(hval5)

,'\r\n'

,hval5,

'\r\n'

,'$'

, length(hkey6)

,'\r\n'

,hkey6,

'\r\n'

,'$'

, length(hval6)

,'\r\n'

,hval6,

'\r'

)from

(select

'hset'

as redis_cmd,

concat(

'user:info:'

, id)

as redis_key,

'id'

as hkey1,

`id`

as hval1,

'name'

as hkey2,

`name`

as hval2,

'***'

as hkey3,

`***`

as hval3,

'age'

as hkey4,

`age`

as hval4,

'score'

as hkey5,

`score`

as hval5,

'remark'

as hkey6 `remark`

as hval6,

from

`user`)

as t

上述其實利用了redis中的resp(redis serialization protocol)協議來操作的,在這個統一協議裡,傳送給redis服務端的所有引數都是二進位制安全的。以下是通用形式:

*後面數量表示存在幾個$

$後面數量表示字串的長度

這裡我們來看一最簡單的redis命令,如:set name bxs0107 ,那麼該命令通過resp協議表示如下:

*3

$3set

$4name

$7bxs0107

其中 *後面數量表示該命令一共有幾組,可以簡單看出共有幾個$符號,然後將看命令有幾部分組成,分別再將其表示出來,先會給出其長度資訊,即$後面的數字。

linux下mysql資料匯入到redis

自redis 2.6以上版本起,redis支援快速大批量匯入資料,即pipe傳輸。通過將要匯入的命令轉換為resp格式,然後通過mysql的concat 來整理出最終匯入的命令集合,以達到快速匯入的目的。1.建立測試表 create table order orderid varchar 38 de...

mysql快速匯入資料方式

2.具體操作步驟 innodb flush log at trx commit 設定為 0,log buffer將每秒一次地寫入log file中,並且log file的flush 刷到磁碟 操作同時進行.該模式下,在事務提交的時候,不會主動觸發寫入磁碟的操作。innodb flush log at...

Mysql 千萬資料快速匯入

最近碰到個專案,需要 千萬條資料入庫的問題,有原本的 類 csv 檔案匯入,統計了下 資料行大概有 1400w 行之多 二話不說,建表,直接 load load data local infile data data.csv into table pk book price character se...