zoukankan      html  css  js  c++  java
  • mysql导入redis

                                                                     将mysql中数据库指定表导入redis

    如何将mysql中某个数据库中的表数据快速导入redis?

    以下将演示将本地127.0.0.1中数据库test中的表t_abc导入本地redis中。步骤如下:

    1.建表语句:

     
    CREATE TABLE `t_abc` (
      `id` int(10) NOT NULL AUTO_INCREMENT,
      `name` varchar(100) DEFAULT NULL,
      `orderNo` varchar(100) DEFAULT NULL,
      `createtime` datetime DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=131073 DEFAULT CHARSET=gbk

    2.插入测试数据:

    INSERT INTO `test`.`t_abc`(NAME,orderNo,createTime) VALUES ('zhangsan1','NO000001',NOW());
    
    执行多次以下sql,可以快速导入数据:
    
    INSERT t_abc(NAME,orderNo,createTime) SELECT t.name,t.orderNo,t.createTime FROM t_abc t;

    3.mysql导入redis语句:

    mysql -hlocalhost -uroot -proot -Dtest --default-character-set=utf8 --skip-column-names --raw <mysqltoredis.sql | redis-cli -h 127.0.0.1 -p 6379 -a 111111 –pipe

    说明:

    1.-h表示数据库地址,-u表示数据库用户名,-p表示数据库密码,-D表示哪个数据库

    2. redis-cli -h 127.0.0.1 -p 6379 -a 111111 –pipe ,表示使用pipe管道连接redis

    3.mysqltoredis.sql需要自己编写:

    注意:1.因为RESP协议中的分隔符为在Linux下是 ,而在Windows下则为

               2.第一行中的*10 ,10代表resp协议中数组的个数, 表示换行符

               3.在Linux下,最后变成了 ,而在Windows下就直接什么都没有了。

               4.其中表t_abc为test数据库中的表,需要导入那列就查询哪列

    在window中如下:

    SELECT CONCAT(
       "*10
    ",
       '$',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
    )FROM(
       SELECT 'HMSET' AS redis_cmd,
       CONCAT_WS(':','order', id) AS redis_key,
       'id' AS hkey1, NAME AS hval1,
       'name' AS hkey2, NAME AS hval2,
       'orderNo' AS hkey3, orderNo AS hval3,
       'createtime' AS hkey4, UNIX_TIMESTAMP(createtime) AS hval4
       FROM t_abc
    )AS t

    在linux中如下:

    SELECT CONCAT(
       "*10
    ",
       '$',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,'
    '
    )FROM(
       SELECT 'HMSET' AS redis_cmd,
       CONCAT_WS(':','order', id) AS redis_key,
       'id' AS hkey1, NAME AS hval1,
       'name' AS hkey2, NAME AS hval2,
       'orderNo' AS hkey3, orderNo AS hval3,
       'createtime' AS hkey4, createtime AS hval4
       FROM t_abc
    )AS t

    4.常见问题:

    ERR Protocol error: expected '$', got ' '

    报这个错,需要检查第一行中*10 数字和数组的参数是否匹配

  • 相关阅读:
    Machine Learning Basic Knowledge
    What is the reason that a likelihood function is not a pdf?
    MySql 增加字段 删除字段 修改字段名称 修改字段类型
    Manual install on Windows 7 with Apache and MySQL
    linux 解压命令大全[转]
    MVC2项目实践
    JSP显示新闻
    servlet应用
    login登录页面
    java web基础
  • 原文地址:https://www.cnblogs.com/lookupthesky/p/10218848.html
Copyright © 2011-2022 走看看