1.需求
前端任务需要将几百万数据某几个关键字段组合成字符串从mysql导入redis 列表中,发现网上大都数linux 以及 redis为key-value形式的hash值,而我需要的是字符串列表,找不少资料始终找不到,无奈只能自己研究了 ..希望能给到大家启发。
2.下载redis 并启动
这个无需多言简单介绍下
首先去 :https://github.com/MSOpenTech/redis/releases 下载 Redis-x64-3.2.100(其他版本亦可)
然后启动 也可以解压之后打到服务里面启动
1.打到服务里面默认端口为6379
redis-server --service-install redis.windows.conf --service-name RdisDb--port 6380
2.或者cmd进入目录直接启动
启动命令:redis-server.exe redis.windows.conf
3.将mysql 数据导入redis中
参考资料:http://blog.itpub.net/26515977/viewspace-1208145/
首先我的数据库格式是这样的
redis 要求的格式是这样的
*<args><cr><lf>
$<len><cr><lf>
<arg0><cr><lf>
<arg1><cr><lf>
...
<argN><cr><lf>
# Where <cr> means "\r" (or ASCII character 13) and <lf> means "\n" (or ASCII character 10).
举个例子
*3\r\n #表明命令中包含的参数个数
$4\r\n #表明第一个参数的长度
HSET\r\n #第一个参数,注意各项关键字也都是参数
$3\r\n #表明第二个参数的长度
AAA\r\n #第二个参数
$4\r\n #表明第三个参数的长度
BBB\r\n #第三个参数
我现在需要的存入数据库的是这种格式
1.将下面sql保存为sql脚本,存入redis 目录中
SELECT CONCAT(
"*3\n",
'$', LENGTH(redis_cmd), '\n',
redis_cmd, '\n',
'$', LENGTH(redis_key), '\n',
redis_key, '\n',
'$', LENGTH(CONCAT("http://baike.baidu.com/item/",hval,"/",hkey)), '\n',CONCAT("http://baike.baidu.com/item/",hval,"/",hkey)
)
FROM (
SELECT
'LPUSH' as redis_cmd,
'ErrorUrl-data' AS redis_key,
newLemmaId AS hkey,
item AS hval
FROM add_doc_copy1
) AS t
上面执行出来就是这个样子 就代表成功
2.cmd进入目录执行写入命令
如果 redis中设置了密码 用下面
mysql -h 127.0.0.1 -uroot -p123456 baike_update --default-character-set=utf8 --skip-column-names --raw < mysql-to-redis.sql | redis-cli.exe -h 127.0.0.1 -p 6381 -a root --pipe
如果没有密码
mysql -h 127.0.0.1 -uroot -p123456 baike_update --default-character-set=utf8 --skip-column-names --raw < mysql-to-redis.sql | redis-cli.exe --pipe
解释:mysql -h 127.0.0.1 -uroot -p123456 (数据库登陆) baike_update(数据库名) --default-character-set=utf8 (数据库有特殊符号等最好加上这句,也可以去掉 ) --skip-column-names --raw < mysql-to-redis.sql | redis-cli.exe -h 127.0.0.1 -p 6381 -a root --pipe (redi执行命令)
3.如果需要存入key-value形式的可以使用下面sql
SELECT CONCAT(
"*4\n",
'$', LENGTH(redis_cmd), '\n',
redis_cmd, '\n',
'$', LENGTH(redis_key), '\n',
redis_key, '\n',
'$', LENGTH(hkey), '\n',
hkey, '\n',
'$', LENGTH(CONCAT("http://baike.baidu.com/item/",hval,"/",hkey)), '\n',CONCAT("http://baike.baidu.com/item/",hval,"/",hkey)
)
FROM (
SELECT
'HSET' as redis_cmd,
'ErrorUrl-data' AS redis_key,
newLemmaId AS hkey,
item AS hval
FROM baike_update.add_doc
) AS t
有问题欢迎留言~~,亲测90w 数据1分钟导入效率杠杠的