使用管道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
mysqluldr user=$DMAIL_USER/$DMAIL_PASS@$DMAIL_HOST:$DMAIL_PORT charset=UTF8 text="CSV" head=No safe=Yes file="${LOC_PATH}/redis_commend.txt" sql="set_mobile_into_redis.sql"			

使用shell脚本定时,将mysql数据导入到redis中去。

使用mysqluldr导出工具,查询出数据,导出为txt文件,用空格作为分割符即可。

要注意编码的区别,空格在window和linux下的不同。直接在linux下生成的文件,编码为unix,此时会执行出错,把文件set ff = dos ,就可以正确执行。

猜你喜欢

转载自blog.csdn.net/RUIMENG061511332/article/details/83054489