使用管道pipe,从mysql同步数据到redis中去的两种方式。
一、第一种方式:
首先看将要输入管道的文件格式和内容:
前置说明:
格式说明如下:
*4 #表示有4个参数
$4 #表示“参数”有三个字节("HSET"字符串为4个字节)
hset #执行的命令
$8 # key有 8个字节
wolys101 #key对应的值
$6 #field对应的长度
passwd #field对应的值
$12 # value的长度
wolysopen111 #value的值
# 一条语句结束
每行默认以 \r\n 结尾
同时在执行玩一行后,以 \r\n 代码一条语句结束
1.1 编写sql语句生成要执行的redis执行命令语句,
举个例子:比如,需要存入机构的联系电话信息,可以使用hash结构存储,一个hashmap,对应一个机构。
使用临时表,存储需要的字段和redis命令:
如上,没一行就是一个完整的redis命令。编写查询语句,生成redis执行命令
mysql_to_redis.sql 如下:
SELECT CONCAT(
"*4\r\n",
'$', LENGTH(t.redis_cmd), '\r\n',
t.redis_cmd, '\r\n',
'$', LENGTH(t.redis_key), '\r\n',
t.redis_key, '\r\n',
'$', LENGTH(t.hkey1), '\r\n',
t.hkey1, '\r\n',
'$', LENGTH(t.hval1), '\r\n',
t.hval1, '\r'
) as redissql
FROM (
select
'HSET' AS redis_cmd, CONCAT(bm,'_hash') AS redis_key,
'mobile' AS hkey1,dh AS hval1
FROM rui.gsjj limit 100
) AS t
然后执行命令:
mysql –h127.0.0.1 -uroot -pzhy123456 -Drui --skip-column-names --raw </usr/local/rui/shell/mysql_to_redis.sql |redis-cli -h 127.0.0.1 -p 6379 --pipe
-D 后面跟上数据库名称。
二、第二种方式
其中data.txt文件内容格式如下:
SET rui meng
SET mobile 13816570705
HSET 123 date 2018-06-07
使用mysql查询出数据,然后导出为txt文件,用空格作为分割符即可。
要注意编码的区别,空格在window和linux下的不同。直接在linux下生成的文件,编码为unix,此时会执行出错,把文件set ff = dos ,就可以正确执行。