Redis协议
*<args><cr><lf> 参数个数 $<len><cr><lf> 第一个参数长度 <arg0><cr><lf> 第一个参数 $<len><cr><lf> 第一个参数长度 <arg1><cr><lf> 第二个参数 ... ...
编写SQL语句,把mysql数据组合成Redis协议数据流
SELECT CONCAT( "*16 ", '$', LENGTH(redis_cmd), ' ',redis_cmd, ' ','$', LENGTH(redis_key), ' ',redis_key, ' ', '$', LENGTH(hkey1), ' ',hkey1, ' ','$', LENGTH(hval1), ' ', hval1, ' ' '$', LENGTH(hkey2), ' ',hkey2, ' ','$', LENGTH(hval2), ' ', hval2, ' ' '$', LENGTH(hkey3), ' ',hkey3, ' ','$', LENGTH(hval3), ' ', hval3, ' ' '$', LENGTH(hkey4), ' ',hkey4, ' ','$', LENGTH(hval4), ' ', hval4, ' ' '$', LENGTH(hkey5), ' ',hkey5, ' ','$', LENGTH(hval5), ' ', hval5, ' ' '$', LENGTH(hkey6), ' ',hkey6, ' ','$', LENGTH(hval6), ' ', hval6, ' ' '$', LENGTH(hkey7), ' ',hkey7, ' ','$', LENGTH(hval7), ' ', hval7, ' ' ) FROM ( SELECT 'HMSET' AS redis_cmd, CONCAT(resource_id,'_hash') AS redis_key, 'name' AS hkey1,resource_title AS hval1, 'type' AS hkey2,resource_type_name AS hval2, 'exe' AS hkey3,resource_format AS hval3, 'page' AS hkey4,resource_page AS hval4, 'size' AS hkey5,resource_size AS hval5, 'time' AS hkey6,create_time AS hval6, 'num' AS hkey7,resource_downcount AS hval7 FROM t_resource_info ) AS t
拼出来的串
*16 $5 HMSET $9 NBA231058 $4 name $51 绿色食品的定义及绿色食品标志的使用 $4 type $6 文本 $3 exe $3 doc $4 page $1 1 $4 size $6 79.5KB $4 time $19 2013-05-31 08:56:59 $3 num $2 18
执行下面的语句
mysql -h 10.10.3.218 -uroot -p123456 -Dtest_db --skip-column-names --raw </usr/local/redis.sql |redis-cli --pipe
–raw: 使mysql不转换字段值中的换行符。
–skip-column-names: 使mysql输出的每行中不包含列名。
单独执行
echo -en '*3 $3 SET $3 key $5 value ' | redis-cli --pipe
经测试200W条数据,2分钟以内就可以完成。