摘要:將命令封裝成通信協(xié)議定義的數(shù)據(jù)格式,批量發(fā)送給執(zhí)行執(zhí)行命令后,如果出現(xiàn)類似以下提示,這說(shuō)明導(dǎo)入正確可以打開輸入或者命令來(lái)進(jìn)行查詢。
為了提高系統(tǒng)性能,在很多系統(tǒng)中使用Redis作為緩存數(shù)據(jù)庫(kù),那么在系統(tǒng)啟動(dòng)或重啟后,希望把DB的數(shù)據(jù)初始化到Redis以提高系統(tǒng)的性能,應(yīng)該如何批量導(dǎo)入大量的數(shù)據(jù)呢?
要導(dǎo)入數(shù)據(jù),就要先了解Redis的協(xié)議(RESP),然后用sql拼接數(shù)據(jù)交給redis導(dǎo)入,RESP格式如下:
*n (*表示數(shù)組,按$劃分) $n (表示參數(shù)長(zhǎng)度) cmd (表示命令) $n (表示參數(shù)長(zhǎng)度) field (表示字段) $n (表示參數(shù)長(zhǎng)度) value (表示值) ...
我們拼個(gè)簡(jiǎn)單的數(shù)據(jù),如下:
*4 $5 HMSET $8 person:1 $2 id $1 1
上面表示有4組,5表示HMSET的長(zhǎng)度,8表示person:1長(zhǎng)度。。。
命令:HMSET person:1 id 1
下面我們?cè)賹懴聅ql,如下:
SELECT CONCAT( "*8 ", "$", LENGTH(redis_cmd), " ", redis_cmd, " ", "$", LENGTH(hash), " ", hash, " ", "$", LENGTH(hkey0), " ", hkey0, " ", "$", LENGTH(hval0), " ", hval0, " ", "$", LENGTH(hkey1), " ", hkey1, " ", "$", LENGTH(hval1), " ", hval1, " ", "$", LENGTH(hkey2), " ", hkey2, " ", "$", LENGTH(hval2), " ", hval2, "" ) FROM ( SELECT "HMSET" AS redis_cmd, concat("hash:", id) AS hash, "id" AS hkey0, id AS hval0, "age" AS hkey1, age AS hval1, "name" AS hkey2, name AS hval2 FROM mytable ) AS t;
注意:換行符 windows使用 ,linux使用
上面的sql可以組裝redis需要的數(shù)據(jù),下面我們編寫導(dǎo)入命令:
mysql -uroot -proot -Dxfdb --default-character-set=utf8 --skip-column-names --raw < mysql_to_redis.sql | redis-cli -h 127.0.0.1 --pipe
--raw: 使mysql不轉(zhuǎn)換字段值中的換行符。
--skip-column-names: 使mysql輸出的每行中不包含列名。
--pipe 將命令封裝成redis通信協(xié)議定義的數(shù)據(jù)格式,批量發(fā)送給redis執(zhí)行
執(zhí)行命令后,如果出現(xiàn)類似以下提示,這說(shuō)明導(dǎo)入正確:
All data transferred. Waiting for the last reply... Last reply received from server. errors: 0, replies: 3
可以打開 Redis-cli 輸入dbsize或者keys *命令來(lái)進(jìn)行查詢。
學(xué)習(xí)交流,請(qǐng)加群:64691032
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/77042.html
摘要:更多詳情,請(qǐng)看原文章批量插入性能優(yōu)化相關(guān)文章高并發(fā)簡(jiǎn)單解決方案隊(duì)列緩存批量入庫(kù)離線整合秒殺活動(dòng)設(shè)計(jì)方案 在項(xiàng)目中,經(jīng)常都會(huì)遇到高并發(fā)問(wèn)題,如在某個(gè)時(shí)間點(diǎn)有100個(gè)人對(duì)同一數(shù)據(jù)進(jìn)行更改,這樣就會(huì)產(chǎn)生問(wèn)題,最后導(dǎo)致的數(shù)據(jù)會(huì)不準(zhǔn)確,通常的解決高并發(fā)的方法有讀取數(shù)據(jù)時(shí)加緩存,寫入數(shù)據(jù)時(shí)添加到隊(duì)列,下面羅列一些處理高并發(fā)的常見(jiàn)方法供大家參考。 一、MySQL批量插入優(yōu)化 對(duì)于一些數(shù)據(jù)量較大的系統(tǒng)...
閱讀 3021·2021-11-25 09:43
閱讀 3392·2021-11-24 09:39
閱讀 2904·2021-09-22 15:59
閱讀 2327·2021-09-13 10:24
閱讀 566·2019-08-29 17:02
閱讀 2165·2019-08-29 13:23
閱讀 3124·2019-08-29 13:06
閱讀 3605·2019-08-29 13:04