windows 下 Mysql数据批量导入Redis

为了提高系统性能,在很多系统中使用Redis作为缓存数据库,那么在系统启动或重启后,希望把DB的数据初始化到Redis以提高系统的性能,应该如何批量导入大量的数据呢?

要导入数据,就要先了解Redis的协议(RESP),然后用sql拼接数据交给redis导入,RESP格式如下:

*n (*表示数组,按$划分)
$n (表示参数长度)  cmd  (表示命令)
$n (表示参数长度)  field  (表示字段)
$n (表示参数长度)  value  (表示值)
...

下面我们再写下sql,如下:


SELECT CONCAT(
  "*8\n",
  '$', LENGTH(redis_cmd), '\n', redis_cmd, '\n',
  '$', LENGTH(hash), '\n',  hash, '\n',
  '$', LENGTH(hkey0), '\n',  hkey0, '\n',
  '$', LENGTH(hval0), '\n',  hval0, '\n',
  '$', LENGTH(hkey1), '\n',  hkey1, '\n',
  '$', LENGTH(hval1), '\n',  hval1, '\n',
  '$', LENGTH(hkey2), '\n',  hkey2, '\n',
  '$', LENGTH(hval2), '\n',  hval2, ''
)
FROM (
  SELECT
  'HSET' AS redis_cmd, concat('pubmobilesection_pre:', SECTIONNO) AS hash,
  'city' AS hkey0,  CITYCODE AS hval0,
  'operator' AS hkey1,  TMOBILECODE AS hval1,
  'province' AS hkey2,  PROVINCECODE AS hval2
  FROM t_pub_mobilesection
) AS t;

注意:换行符 windows使用 \n ,linux使用 \r\n

 

上面的sql可以组装redis需要的数据,下面我们编写导入命令:

mysql -uroot -proot -Dxfdb --default-character-set=utf8 --skip-column-names 
--raw < mysql_to_redis.sql | redis-cli -h 127.0.0.1 --pipe

--raw: 使mysql不转换字段值中的换行符。
--skip-column-names: 使mysql输出的每行中不包含列名。
--pipe 将命令封装成redis通信协议定义的数据格式,批量发送给redis执行

执行命令后,如果出现类似以下提示,这说明导入正确:

All data transferred. Waiting for the last reply...
Last reply received from server.
errors: 0, replies: 3

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值