zoukankan      html  css  js  c++  java
  • 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分钟以内就可以完成。

  • 相关阅读:
    LOJ 10160
    LOJ 10155
    2018-11-1 NOIP 模拟赛解题报告
    联考前停课集训随笔
    一个博客园代码高亮的方案
    详解使用 Tarjan 求 LCA 问题(图解)
    NOIP2018普及初赛解析
    关于CCR测评器的自定义校验器(Special Judge)
    日常,异常处理
    Androidstudio 编译慢 这样的体验肯定很多人都有!!!
  • 原文地址:https://www.cnblogs.com/archoncap/p/5393483.html
Copyright © 2011-2022 走看看