问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎么把mysql查询的内容格式化成redis-cli可用的数据格式

发布网友 发布时间:2022-04-08 06:20

我来回答

2个回答

懂视网 时间:2022-04-08 10:42

,保存为data.txt

    然后使用 redis的客户端 redis-cli的管道传输(redis的版本要大于2.6)

      linux下使用命令:

         cat data.txt | redis-cli --pipe

      成功的话就会出现如下结果:

      All data transferred. Waiting for the last reply...

      Last reply received from server.

      errors: 0, replies: 3

2. 使用符合redis协议格式的数据

       虽然第一种方法比较方便,不过存在的问题是,有时redis无法正确解释数据,所有推荐的第二种方式

       此协议数据的格式如下: 

*3<cr><lf>
$3<cr><lf>
SET<cr><lf>
$3<cr><lf>
key<cr><lf>
$5<cr><lf>
value<cr><lf>

  意义如下:

       第一行: *3<cr><lf> : 星号*是规定格式;3是参数的个数(如上:SET、key、value) ;<cr>是‘ ‘; <lf>是‘ ‘。

       第二、三行: $3<cr><lf>  : $是规定格式;3是对应命令SET的长度(3个字母);<cr><lf>同上

    所以上述格式又可写成:

*3
$3
SET
$3
key
$5
value
 

 

3. 使用mysql一次性导入大量数据的原理是一样的

       将数据按上述协议的格式导出来,然后再通过redis-cli --pipe导入

    例子: 

       建表语句:

CREATE TABLE `device_type` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `name` varchar(200) NOT NULL,
 `class` varchar(500) NOT NULL,
 `class_guid` varchar(500) NOT NULL,
 PRIMARY KEY (`id`),
 KEY `idx_name` (`name`),
 KEY `idx_class` (`class`(50),`class_guid`(200))
) ENGINE=MyISAM AUTO_INCREMENT=287 DEFAULT CHARSET=utf8;
SELECT * FROM drivers_lookup_com.driver_files;

  导出数据并转换成redis-cli能处理的格式:

SELECT CONCAT(
 "*8
",
 ‘$‘,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,‘
‘
)FROM(
 SELECT ‘HMSET‘ AS redis_cmd,
 id AS redis_key,
 ‘name‘ AS hkey1, name AS hval1,
 ‘class‘ AS hkey2,class AS hval2,
 ‘class_guid‘ AS hkey3,class_guid AS hval3
 From device_type
)AS t

  转换的命令如下:

 mysql -h192.168.0.104 -uroot -p123 device --skip-column-names --raw < device.sql | src/redis-cli --pipe

  

 

MySQL导数据到Redis

标签:

热心网友 时间:2022-04-08 07:50

  从mysql搬一个大表到redis中,你会发现在提取、转换或是载入一行数据时,速度慢的让你难以忍受。这里我就要告诉一个让你解脱的小技巧。使用“管道输出”的方式把mysql命令行产生的内容直接传递给redis-cli,以绕过“中间件”的方式使两者在进行数据操作时达到最佳速度。
  一个约八百万行数据的mysql表,原本导入到redis中需要90分钟,使用这个方法后,只需要两分钟。不管你信不信,反正我是信了。
  Mysql到Redis的数据协议
  redis-cli命令行工具有一个批量插入模式,是专门为批量执行命令设计的。这第一步就是把Mysql查询的内容格式化成redis-cli可用的数据格式。here we go!
  我的统计表:
  ?1234567 CREATE TABLE events_all_time ( id int(11) unsigned NOT NULL AUTO_INCREMENT, action varchar(255) NOT NULL, count int(11) NOT NULL DEFAULT 0, PRIMARY KEY (id), UNIQUE KEY uniq_action (action) );准备在每行数据中执行的redis命令如下:
  HSET events_all_time [action] [count]
  按照以上redis命令规则,创建一个events_to_redis.sql文件,内容是用来生成redis数据协议格式的SQL:
  -- events_to_redis.sql
  ?12345678910111213141516171819 SELECT CONCAT( "*4\r\n", '$', LENGTH(redis_cmd), '\r\n', redis_cmd, '\r\n', '$', LENGTH(redis_key), '\r\n', redis_key, '\r\n', '$', LENGTH(hkey), '\r\n', hkey, '\r\n', '$', LENGTH(hval), '\r\n', hval, '\r') FROM ( SELECT 'HSET' as redis_cmd, 'events_all_time' AS redis_key, action AS hkey, count AS hval FROM events_all_time ) AS tok, 用下面的命令执行:
  ?1 mysql stats_db --skip-column-names --raw < events_to_redis.sql | redis-cli --pipe很重要的mysql参数说明:
  1.--raw: 使mysql不转换字段值中的换行符。
  2.--skip-column-names: 使mysql输出的每行中不包含列名。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
重磅|8月1日起 报关单的填法将重大改变 进出口权需要报关员么 宝宝被莫名的虫子咬了又红又肿又痒怎么? 北京疫情个为数是什么意思? 在做刀伤的手术时没有接上神经是医院的过错吗? 手术室收费项目有哪些 手术室的秘密:一台10万的手术,主刀医生拿多少?答案颠覆你的认知 阿里巴巴中修改产品信息只修改一小部分行吗?谢谢 可否给我一个阿里巴巴的序列号~谢谢了 阿里巴巴店铺产品搜索框代码谁有呢,给我发一下谢谢了! 怎样抽蒜苔不断 蒜苔长大怎么收获,抽蒜苔的时候有没有更好的办法可以不断 请教一下我在家里种了几十棵大蒜怎么打蒜苔? 蒜苔怎么抽出来?我家种了些大蒜,现在长出苔了,请问怎么抽出大蒜的苔呀,谢谢了 拔蒜苔的勾怎么用 ferre是什么牌子香水 Dosganey这是什么牌子香水 朋友从国外带了瓶香水,是什么法国蓝血贵族香水,有这牌子吗? 天使之吻 ANGEL KISS DOOSAR 有没有DOOSAE香水 DOOSAR有这种牌子的香水吗 doosar是什么牌子香水? 什么叫古偶句? 颜值不够可以演古偶剧吗? 《嘉南传》放火退婚、相爱相杀,这部古偶是否合格? 古偶剧的女二艳压,其实都是“人设艳压”,为何导演要赵露思压热巴呢? 古偶整个是什么意思 周冬雨“下凡”演古偶是败笔,为什么会这么说? 我低压110高压140是高血压吗?怎么样治疗? 任嘉伦是如何一步步变成古偶男神的? 左土右庶念什么 土加庶怎么读 土庶莫有至者,导患之是什么意思 士庶是什么意思 英语翻译 天子不仁,不保四海,诸侯不仁,不保社稷,卿大夫不仁,不保宗庙,土庶不仁,不保国体. 白居易的号叫什么?? 土字旁加上一个“庶”字 一个土再加个庶读什么 土字旁加庶,左右结构,念什么样的拼音? 初中毕业生可以考面点师证吗? 一个土一个庶是什么子? 土和庶两个字组合成一个字认什么 庶吉土是什么意思? 庶字怎么组词 庶,颁的(形音字组词) 为什么我用手机登QQ 会显示电脑在登QQ 怎么看QQ好友的真实位置? 华为mate9删除键没反应 我的手机是华为mate9,刚买一年 手机电源键就坏了,这怎么办啊? 花儿乐队的《嘻唰唰》 歌词