cat data.txt | redis-cli --pipe
附從mysql遷移的乙個高效技巧!
在把乙個大表從 mysql 遷移到 redis 時,你可能會發現,每次提取、轉換、匯入一條資料是讓人難以忍受的慢!這裡有乙個技巧,你可以通過使用管道把 mysql 的輸出直接輸入到 redis-cli輸入端,這可以使兩個資料庫都能以他們的最頂級速度來執行。
使用了這個技術,我把 800 萬條 mysql 資料匯入到 redis 的時間從 90 分鐘縮短到了兩分鐘。
mysql到redis的資料協議
redis-cli命令列工具有乙個批量插入模式,是專門為批量執行命令設計的。這第一步就是把mysql查詢的內容格式化成redis-cli可用的資料格式。here we go!
我的統計表:
create準備在每行資料中執行的redis命令如下:table
events_all_time (
id int
(11) unsigned
notnull
auto_increment,
action
varchar
(255)
notnull
, count
int(11)
notnull
default
0,
primary
key(id),
unique
keyuniq_action (
action
) );
hset events_all_time [按照以上redis命令規則,建立乙個events_to_redis.sql檔案,內容是用來生成redis資料協議格式的sql:action
] [count
]
-- 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'
asredis_cmd,
'events_all_time'
asredis_key,
action
ashkey,
count
ashval
from
events_all_time
) as
t
mysql stats_db很重要的mysql引數說明:--skip-column-names --raw < events_to_redis.sql | redis-cli --pipe
--raw: 使mysql不轉換字段值中的換行符。
--skip-column-names: 使mysql輸出的每行中不包含列名。
Linux檔案寫入操作
上一講寫到linux環境下檔案的建立,這講承上啟下 先看 include include include include include include intmain printf open success fd d n fd write fd,buf,strlen buf close fd re...
文字檔案從磁碟讀取 寫入
using system using system.text using system.io namespace x.common return result 寫入文字檔案,按預設編碼 文字檔案路徑包括檔名 寫入內容 public static void write string filepath,...
Redis批量寫入資料
生產中的有些場景,我們經常需要大批量的往redis中寫入資料,如果我們採用單條迴圈寫入的話,不僅效率低下,而且可能會出現頻繁的建立和銷毀redis連線,這些都是很不合理的.對此,我們可以採用jedis的父類中的pipelined 方法獲取管道,它可以實現一次性傳送多條命令並一次性返回結果,這樣就大量...