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 数字和数组的参数是否匹配

  • 相关阅读:
    将Nginx添加到windows服务中
    springboot使用redis管理session
    GIT常用命令
    阻止360、谷歌浏览器表单自动填充
    谈谈对Spring IOC的理解
    同一个Nginx服务器同一端口配置多个代理服务
    LeetCode 653. Two Sum IV
    109. Convert Sorted List to Binary Search Tree(根据有序链表构造平衡的二叉查找树)
    108. Convert Sorted Array to Binary Search Tree(从有序数组中构造平衡的BST)
    LeetCode 236. Lowest Common Ancestor of a Binary Tree(二叉树求两点LCA)
  • 原文地址:https://www.cnblogs.com/lookupthesky/p/10218848.html
Copyright © 2011-2022 走看看