一步完成 MySQL 向 Redis 遷移

2022-06-07 14:30:18 字數 1550 閱讀 7014

從mysql搬乙個大表到redis中,你會發現在提取、轉換或是載入一行資料時,速度慢的讓你難以忍受。這裡我就要告訴乙個讓你解脫的小技巧。使用「管道輸出」的方式把mysql命令列產生的內容直接傳遞給redis-cli,以繞過「中介軟體」的方式使兩者在進行資料操作時達到最佳速度。

乙個約八百萬行資料的mysql表,原本匯入到redis中需要90分鐘,使用這個方法後,只需要兩分鐘。不管你信不信,反正我是信了。

redis-cli命令列工具有乙個批量插入模式,是專門為批量執行命令設計的。這第一步就是把mysql查詢的內容格式化成redis-cli可用的資料格式。here we go!

翻譯於 6年前

6人頂頂

翻譯得不錯哦!

我的統計表:

create table events_all_time (

id int(11) unsigned not null auto_increment,

action varchar(255) not null,

count int(11) not null default 0,

primary key (id),

unique key uniq_action (action)

);

準備在每行資料中執行的redis命令如下:
hset events_all_time [action] [count]

按照以上redis命令規則,建立乙個events_to_redis.sql檔案,內容是用來生成redis資料協議格式的sql:
-- events_to_redis.sql

select concat(

"*4\r\n",

'$', length(redis_cmd), '\r\n',

redis_cmd, '\r\n',

'$', length(redis_key), '\r\n',

redis_key, '\r\n',

'$', length(hkey), '\r\n',

hkey, '\r\n',

'$', length(hval), '\r\n',

hval, '\r'

)from (

select

'hset' as redis_cmd,

'events_all_time' as redis_key,

action as hkey,

count as hval

from events_all_time

) as t

ok, 用下面的命令執行:
mysql stats_db --skip-column-names --raw < events_to_redis.sql | redis-cli --pipe
很重要的mysql引數說明:

--raw: 使mysql不轉換字段值中的換行符。

--skip-column-names: 使mysql輸出的每行中不包含列名。

一步一步完成自己的夢想

在這裡記錄我的環球旅遊夢想!我要周遊整個世界,去我從來沒有去過的地方,體驗這個我生活過的地球,讓全世界都留下我的腳印,用單反記錄下我的所有旅程。之後不斷的完善這篇文章,記錄我的旅遊軌跡。18歲讀大學,問你理想是什麼,你說環遊世界 22歲讀完大學,你說找了工作以後再去 26歲工作穩定,你說買了房以後再...

一步完成linux安裝jdk

出處 以前一直沒學shell,一直沒在意這個東西,乙個linux命令重複寫了好多遍,其實乙個sh指令碼就搞定了,在也不用乙個個命令敲到終端了。下面這個例 子就是經常使用到的例子,這個例子是用來安裝jdk的,很多linux系統都是要自己安裝jdk的,為了省事直接把安裝的過程寫成乙個shell指令碼,直...

一步一步 Sql Azure

一步一步 sql azure 1.使用 windowsazure 平台賬號登陸 2.新建sqlazure server 3.新建資料庫 4.為sql azure server 新增防火牆規則,只有將本機新增到規則裡才能從本機連線到該sqlazure server 5.連線到sql azure ser...