怎样将mysql中的数据导入redis

12 篇文章 0 订阅

通过管道传输pipe将MySQL数据批量导入Redis

     自Redis 2.6以上版本起,Redis支持快速大批量导入数据,即官网的Redis Mass Insertion,即Pipe传输,

通过将要导入的命令转换为Resp格式,然后通过MySQL的concat()来整理出最终导入的命令集合,以达到快速导入的目的。

1. 根据需求设计好Redis的hash结构,关键是Key的设计

    Redis其实就是内存数据库,而其中最常用的就是hash结构,key-value,查询时需要使用到key,所以key的设计决定了查询的效率,

我们以虚拟机的stress库下面的order为例

批量设值

HMSET myhashfield1 "Hello" field2 "World"

 紫色框引用了select出来的数据,然后转换成符合RESP协议格式:

第一行的 *10\r\n  :  *表示数组,10表示数组元素个数*(可以看下面的SQL查询语句标红的字段有10个,所以为10), \r\n是规定分隔符

第二行的 '$',LENGTH(redis_cmd),'\r\n',redis_cmd,'\r\n',    

: $表示长字符串,LENGTH(redis_cmd)表示字符串长度,

redis_cmd字符串变量,

\r\n还是规定字符串(window的redis是\n)

测试表结构:

Create Table

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

查询SQL语句:

SELECT CONCAT(
 '*10\r\n',
   '$', LENGTH(redis_cmd), '\r\n', redis_cmd, '\r\n',
   '$', LENGTH(redis_key), '\r\n', redis_key, '\r\n',
   '$', LENGTH(hkey1),'\r\n',hkey1,'\r\n','$',LENGTH(hval1),'\r\n',hval1,'\r\n',
   '$', LENGTH(hkey2),'\r\n',hkey2,'\r\n','$',LENGTH(hval2),'\r\n',hval2,'\r\n',
   '$', LENGTH(hkey3),'\r\n',hkey3,'\r\n','$',LENGTH(hval3),'\r\n',hval3,'\r\n',
   '$', LENGTH(hkey4),'\r\n',hkey4,'\r\n','$',LENGTH(hval4),'\r\n',hval4,'\r'
)
FROM (
 SELECT
 'HSET' AS redis_cmd,
 CONCAT('order:info:',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
 FROM `order`
) AS t

将以上查询SQL查询语句在LINUX上存储order.sql文件

执行指令:

mysql -utest -ptest stress --default-character-set=utf8--skip-column-names --raw < order.sql | redis-cli --pipe

-utest -ptest stress  代表连接test用户 密码为test 数据库为stress,并登录数据库

--raw < order.sql    表示将order.sql的sql语句内容粘贴到mysql里执行(以上指令代表已登录MYSQL)

redis-cli --pipe      表示使用redis pipe管道把数据导入到redis中

如果有密码了,还得加上, -h 192.168.177.138 -a 123456

查看:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fyihdg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值