coding
最代碼官方的gravatar頭像
最代碼官方2015-12-16 18:06:47

redis-cli pipe方式導入mysql sql查詢導出的redis Protocol格式數據

mysql的數據導入到redis中可以通過編寫腳本來實現,先連接db然后將查詢出的數據批量寫入到redis中,但redis pipe的方式更加簡便高效。

分享下最代碼的相關腳本代碼片段:

linux下直接執行

mysql -uroot -p111111 javaniu --skip-column-names --default-character-set=utf8 --raw < eve_uid_tp_scid_st_t.tpl| redis-cli -p 6379 --pipe

windows下

mysql -uroot -p111111 javaniu --skip-column-names --default-character-set=utf8 --raw < c:/eve_uid_tp_scid_st_t.tpl | redis-cli -p 6379 --pipe

linux下導出文件分隔符是\r\n,而windows下是\n

linux下腳本

SELECT CONCAT(
  "*4\r\n",
  '$', LENGTH(redis_cmd), '\r\n',
  redis_cmd, '\r\n',
  '$', LENGTH(eve_st), '\r\n',
  eve_st, '\r\n',
  '$', LENGTH(score), '\r\n',
  score, '\r\n',
  '$', LENGTH(member), '\r\n',
  member, '\r'
)
FROM (
  SELECT
  'zadd' as redis_cmd,
  concat('eve_',status) as eve_st,
  id as member,
  unix_timestamp(create_time) AS score
  FROM event where status=0
) AS eve

windows下腳本

SELECT CONCAT(
  "*4\r\n",
  '$', LENGTH(redis_cmd), '\n',
  redis_cmd, '\n',
  '$', LENGTH(eve_st), '\n',
  eve_st, '\n',
  '$', LENGTH(score), '\n',
  score, '\n',
  '$', LENGTH(member), '\n',
  member
)
FROM (
  SELECT
  'zadd' as redis_cmd,
  concat('eve_',status) as eve_st,
  id as member,
  unix_timestamp(create_time) AS score
  FROM event where status=0
) AS eve

redis Protocol格式說明如下:

#表示有4個參數
*4 
#表示命令長度
$LENGTH(redis_cmd)
#命令
redis_cmd
#key長度
$LENGTH(eve_st)
#key值
eve_st
#value長度
$LENGTH(score)
#value值
score

redis-cli pipe方式導入mysql sql查詢導出的redis Protocol格式數據

執行結果如下圖:

redis-cli pipe方式導入mysql sql查詢導出的redis Protocol格式數據


打賞

頂部客服微信二維碼底部
>掃描二維碼關注最代碼為好友掃描二維碼關注最代碼為好友
2008大乐透走势图