前言
因为公司业务的需要,需要快速的将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中了,结果如下: