最代码广告位
最代码官方的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格式数据

顶部客服微信二维码底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友