• mysql数据向Redis快速导入


    mysql数据向Redis快速导入
    
    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分钟以内就可以完成。

    mysql数据向Redis快速导入

     

    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分钟以内就可以完成。

  • 相关阅读:
    骑士飞行棋 C#代码详解
    C#中的static静态变量的用法
    Break和Continue的一些注意事项
    枚举类型
    html 01-认识Web和Web标准
    css 17-CSS3的常见边框汇总
    css 16-浏览器的兼容性问题
    css 15-Sass入门
    css 14-CSS3属性详解:Web字体
    css 13-CSS3属性:Flex布局图文详解
  • 原文地址:https://www.cnblogs.com/archoncap/p/5393483.html
Copyright © 2020-2023  润新知