• 怎样将mysql中的数据导入redis


    通过管道传输pipe将MySQL数据批量导入Redis

    自Redis 2.6以上版本起,Redis支持快速大批量导入数据,即官网的Redis Mass Insertion,即Pipe传输,

    通过将要导入的命令转换为Resp格式,然后通过MySQL的concat()来整理出最终导入的命令集合,以达到快速导入的目的。

    1. 根据需求设计好Redis的hash结构,关键是Key的设计

    Redis其实就是内存数据库,而其中最常用的就是hash结构,key-value,查询时需要使用到key,所以key的设计决定了查询的效率,

    我们以虚拟机的stress库下面的order为例

    批量设值

    HMSET myhashfield1 “Hello” field2 “World”

    紫色框引用了select出来的数据,然后转换成符合RESP协议格式:

    第一行的 *10 : *表示数组,10表示数组元素个数*(可以看下面的SQL查询语句标红的字段有10个,所以为10), 是规定分隔符

    第二行的’$‘,LENGTH(redis_cmd),’ ‘,redis_cmd,’ ',
    $表示长字符串,LENGTH(redis_cmd)表示字符串长度,

    redis_cmd字符串变量,

    还是规定字符串(window的redis是 )

    测试表结构:

    Create Table
    
    CREATE TABLE `order` (
      `orderid` varchar(38) DEFAULT NULL,
      `ordertime` datetime DEFAULT NULL,
      `ordermoney` decimal(20,0) DEFAULT NULL,
      `orderstatus` char(1) DEFAULT NULL,
      `version` int(11) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    查询SQL语句:

    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
     'HSET' AS redis_cmd,
     CONCAT('order:info:',orderid) AS redis_key,
     'ordertime' AS hkey1, ordertime AS hval1,
     'ordermoney' AS hkey2, ordermoney AS hval2,
     'orderstatus' AS hkey3, orderstatus AS hval3,
     'version' AS hkey4, `version` AS hval4
     FROM `order`
    ) AS t
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    将以上查询SQL查询语句在LINUX上存储order.sql文件

    执行指令:

    mysql -utest -ptest stress --default-character-set=utf8–skip-column-names --raw < order.sql | redis-cli --pipe

    -utest -ptest stress 代表连接test用户 密码为test 数据库为stress,并登录数据库

    –raw < order.sql 表示将order.sql的sql语句内容粘贴到mysql里执行(以上指令代表已登录MYSQL)

    redis-cli --pipe 表示使用redis pipe管道把数据导入到redis中

    如果有密码了,还得加上,-h 192.168.177.138 -a 123456

    查看:

  • 相关阅读:
    在CentOS 7.7 x86_64上为python 2.7.5安装pip的靠谱方法
    《动手学深度学习 Pytorch版》 9.8 束搜索
    “薄利多销”策略研究与建模
    2核4G游戏服务器推荐(阿里云/腾讯云/华为云)
    深入解析具名导入es6规范中的具名导入是在做解构吗
    数字信号处理——CFAR检测器设计(2)
    官宣!不藏了~AnyCase 4.0 真“箱”
    小唐源代码搜索引擎上线,可搜索28种程序语言源代码,源码来自123万个star数量超过100的github项目
    进程,进程映象,指令的区别
    2024 泛娱乐企业出海音视频选型攻略
  • 原文地址:https://blog.csdn.net/web15286201346/article/details/126578305