摘要:將命令封裝成通信協議定義的數據格式,批量發送給執行執行命令后,如果出現類似以下提示,這說明導入正確可以打開輸入或者命令來進行查詢。
為了提高系統性能,在很多系統中使用Redis作為緩存數據庫,那么在系統啟動或重啟后,希望把DB的數據初始化到Redis以提高系統的性能,應該如何批量導入大量的數據呢?
要導入數據,就要先了解Redis的協議(RESP),然后用sql拼接數據交給redis導入,RESP格式如下:
*n (*表示數組,按$劃分) $n (表示參數長度) cmd (表示命令) $n (表示參數長度) field (表示字段) $n (表示參數長度) value (表示值) ...
我們拼個簡單的數據,如下:
*4 $5 HMSET $8 person:1 $2 id $1 1
上面表示有4組,5表示HMSET的長度,8表示person:1長度。。。
命令:HMSET person:1 id 1
下面我們再寫下sql,如下:
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需要的數據,下面我們編寫導入命令:
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不轉換字段值中的換行符。
--skip-column-names: 使mysql輸出的每行中不包含列名。
--pipe 將命令封裝成redis通信協議定義的數據格式,批量發送給redis執行
執行命令后,如果出現類似以下提示,這說明導入正確:
All data transferred. Waiting for the last reply... Last reply received from server. errors: 0, replies: 3
可以打開 Redis-cli 輸入dbsize或者keys *命令來進行查詢。
學習交流,請加群:64691032
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/77042.html
摘要:更多詳情,請看原文章批量插入性能優化相關文章高并發簡單解決方案隊列緩存批量入庫離線整合秒殺活動設計方案 在項目中,經常都會遇到高并發問題,如在某個時間點有100個人對同一數據進行更改,這樣就會產生問題,最后導致的數據會不準確,通常的解決高并發的方法有讀取數據時加緩存,寫入數據時添加到隊列,下面羅列一些處理高并發的常見方法供大家參考。 一、MySQL批量插入優化 對于一些數據量較大的系統...
閱讀 2957·2021-11-25 09:43
閱讀 3332·2021-11-24 09:39
閱讀 2840·2021-09-22 15:59
閱讀 2193·2021-09-13 10:24
閱讀 516·2019-08-29 17:02
閱讀 2108·2019-08-29 13:23
閱讀 3068·2019-08-29 13:06
閱讀 3546·2019-08-29 13:04