redis-cli 利用管道批量导入MySQL数据到Redis

前言

 因为公司业务的需要,需要快速的将mysql的中的数据查询导入到redis中,程序遍历MySQL然后插入Redis,效率极低。利用redis-cli命令行工具有一个批量插入模式,是专门为批量执行命令设计的。可以把Mysql查询的内容格式化成redis-cli可用数据格式。

一、sql构造数据

SELECT CONCAT(
  "*3\r\n",
  '$', LENGTH(redis_cmd), '\r\n',
  redis_cmd, '\r\n',
  '$', LENGTH(redis_key), '\r\n',
  redis_key, '\r\n',
  '$', LENGTH(value), '\r\n',
  value, '\r'
)
FROM (
  SELECT
  'SADD' AS redis_cmd,
  'error_link_urls' AS redis_key,
  CONCAT(a.site_url, '|_|_|', a.link_url) AS VALUE
  FROM 51yunjiance.site_fail_link a  GROUP BY a.site_url,a.link_url
) AS t

sql说明:

redis 要求数据格式是:

*<args><cr><lf>
$<len><cr><lf>
<arg0><cr><lf>
<arg1><cr><lf>
...
<argN><cr><lf>
 
# Where <cr> means "\r" (or ASCII character 13) and <lf> means "\n" (or ASCII character 10).

举个例子:

*3\r\n    #表明命令中包含的参数个数
$4\r\n    #表明第一个参数的长度
HSET\r\n   #第一个参数,注意各项关键字也都是参数
$3\r\n    #表明第二个参数的长度
AAA\r\n   #第二个参数
$4\r\n    #表明第三个参数的长度
BBB\r\n  #第三个参数

这样上面执行的数据结果就是下面这个样子的:

单条数据就是下面这样子的:

*3       // 3代表参数的个数
$4       // 4代表第一个参数的长度
SADD     // 第一个参数
$15
error_link_urls
$83
http://www.snxingping.gov.cn/|_|_|http://jingda.12371.cn/web/html/implementest.html

二、将构造数据导入redis

mysql -uroot -proot --skip-column-names --raw < error_link.sql | /usr/local/bin/redis-cli -h 192.168.88.25 --pipe
  • --skip-column-names:不显示列名
  • --raw:原生输出,不做任何转义

1、mysql -uroot -proot --skip-column-names --raw < error_link.sql  将mysql中数据查询出来并构造成redis-client 需要的格式:

2、/usr/local/bin/redis-cli -h 192.168.88.25 --pipe 执行查询出的结果,这样查询结果就导入到redis中了,结果如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值