测试表结构:
CREATE TABLE `order` (
`orderid` varchar(38) DEFAULT NULL,
`ordertime` datetime DEFAULT NULL,
`ordermoney` decimal(20,0) DEFAULT NULL,
`orderstatus` char(1) DEFAULT NULL,
`version` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
第一行的 *12\r\n : *表示数组,12表示数组元素个数*(可以看下面的SQL查询语句标红的字段有12个,所以为12), \r\n是规定分隔符
第二行的 '$',LENGTH(redis_cmd),'\r\n',redis_cmd,'\r\n',
: $表示长字符串,LENGTH(redis_cmd)表示字符串长度,
redis_cmd 字符串变量,
注意:\r\n还是规定字符串(window的redis是\n)
SELECT CONCAT(
'*12\n',
'$', LENGTH(redis_cmd), '\n', redis_cmd, '\n',
'$', LENGTH(redis_key), '\n', redis_key, '\n',
'$', LENGTH(hkey1),'\n',hkey1,'\n','$',LENGTH(hval1),'\n',hval1,'\n',
'$', LENGTH(hkey2),'\n',hkey2,'\n','$',LENGTH(hval2),'\n',hval2,'\n',
'$', LENGTH(hkey3),'\n',hkey3,'\n','$',LENGTH(hval3),'\n',hval3,'\n',
'$', LENGTH(hkey4),'\n',hkey4,'\n','$',LENGTH(hval4),'\n',hval4,'\n',
'$', LENGTH(hkey5),'\n',hkey5,'\n','$',LENGTH(hval5),'\n',hval5,''
)
FROM (
SELECT
'HMSET' AS redis_cmd,
CONCAT('order:',orderid) AS redis_key,
'ordertime' AS hkey1, ordertime AS hval1,
'ordermoney' AS hkey2, ordermoney AS hval2,
'orderstatus' AS hkey3, orderstatus AS hval3,
'version' AS hkey4, `version` AS hval4,
'orderid' AS hkey5, `orderid` AS hval5
FROM `order`
) AS t
将以上查询SQL查询语句在LINUX上存储order.sql文件
执行指令:
mysql -uroot -p123 ytwo --default-character-set=utf8 --skip-column-names --raw < order.sql | redis-cli --pipe -h 127.0.0.1 -a 123
-uroot -p123 ytwo 代表连接root用户 密码为123数据库为ytwo,并登录数据库
--raw < order.sql 表示将order.sql的sql语句内容粘贴到mysql里执行(以上指令代表已登录MYSQL)
redis-cli --pipe 表示使用redis pipe管道把数据导入到redis中
-h 127.0.0.1 -a 123 -h服务器地址 -a 密码
--default-character-set=utf8 使用utf8作为默认编码
--raw 使mysql不转换字段值中的换行符
--skip-column-names 使mysql输出的每行中不包含列名
| 管道符号(意思是将该符号左边的运算结果提交给右边的命令处理,这里是先通过MySQL到处数据,然后用redis-cli导入到Redis)
查看
发表评论 取消回复