從mysql搬乙個大表到redis中,你會發現在提取、轉換或是載入一行資料時,速度慢的讓你難以忍受。這裡我就要告訴乙個讓你解脫的小技巧。使用「管道輸出」的方式把mysql命令列產生的內容直接傳遞給redis-cli,以繞過「中介軟體」的方式使兩者在進行資料操作時達到最佳速度。
乙個約八百萬行資料的mysql表,原本匯入到redis中需要90分鐘,使用這個方法後,只需要兩分鐘。不管你信不信,反正我是信了。
redis-cli命令列工具有乙個批量插入模式,是專門為批量執行命令設計的。這第一步就是把mysql查詢的內容格式化成redis-cli可用的資料格式。here we go!
翻譯於 6年前
6人頂頂
翻譯得不錯哦!
我的統計表:
create table events_all_time (準備在每行資料中執行的redis命令如下: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)
);
hset events_all_time [action] [count]按照以上redis命令規則,建立乙個events_to_redis.sql檔案,內容是用來生成redis資料協議格式的sql:
-- events_to_redis.sqlok, 用下面的命令執行: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
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...