文档章节

mysql导入redis

 张欢19933
发布于 2017/05/09 10:46
字数 581
阅读 61
收藏 1

程序遍历MySQL然后插入Redis,效率极低。利用redis-cli命令行工具有一个批量插入模式,是专门为批量执行命令设计的。可以把Mysql查询的内容格式化成redis-cli可用数据格式。

1, 根据表创建一个sql,将数据转换为redis可用的格式

(1) 表结构

(2) Redis的数据格式

    *3\r\n            命令起始,定义共3个输入参数  
    $3\r\n            下一个参数字节长度  
    SET\r\n           命令参数  
    $3\r\n             下一个参数字节长度  
    key\r\n           变量参数  
    $5\r\n            下一个参数字节长度  
    value\r\n        值参数  
      
    注意:此处的\r\n为换行符,不是输入的字符。linux下导出文件分隔符是\r\n,而windows下是\n。

(3) 创建sql文件,sql语句是将数据转为redis可接收的语句

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,
  CONCAT('pid:' ,PID) AS redis_key,
  ID AS hkey,
  AREANAME AS hval
  FROM td_area
) AS t

2,在有mysql客户端的机器执行命令

mysql -uroot -p123456 -h 127.0.0.1 database --skip-column-names --raw < /home/redis.sql | /usr/local/redis/bin/redis-cli -p 6380 --pipe

重要的mysql参数说明: 
--raw: 使mysql不转换字段值中的换行符。 
--skip-column-names: 使mysql输出的每行中不包含列名。

然而在我的使用过程中发现了一个问题,由于业务关系,我的基础业务数据库中会存在空列,而这个又是关键数据,需要迁移到Redis中的。单纯利用上述的SQL语句,进行操作的时候,Redis-cli会抛出“Unknown Command NULL on Redis.” 
我们知道,Redis是可以存储二进制数据的(而实际上Redis存储的Value都是二进制格式存储的),所以空数据理论上是可以存入的。然而根据观察,Redis的空数据,表现为空字符串形式,即“”。所以,我们需要将我们数据库中为NULL的数据,转换成为“”进行输出

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,
  \'david\' AS redis_key,
  myname AS hkey,
  if(mymoney is not null, mymoney, '') AS hval
  FROM david_lin
) AS t;

 

© 著作权归作者所有

粉丝 47
博文 533
码字总数 244932
作品 0
海淀
私信 提问
一步完成 MySQL 向 Redis 迁移

从mysql搬一个大表到redis中,你会发现在提取、转换或是载入一行数据时,速度慢的让你难以忍受。这里我就要告诉一个让你解脱的小技巧。使用“管道输出”的方式把mysql命令行产生的内容直接传...

oschina
2013/01/03
27.8K
30
将mysql数据导入到redis

用脚本模拟redis的客户端redis-cli实现:(注:mysql地址为10.86.30.203 redis地址为10.86.31.50) 1.首先确定mysql表的列: 2.编写sql脚本: 注意:其中*8的意思是一共有8个参数,$length()...

王家东哥
2018/08/15
0
0
一步完成MySQL向Redis迁移

在把一个大表从 MySQL 迁移到 Redis 时,你可能会发现,每次提取、转换、导入一条数据是让人难以忍受的慢!这里有一个技巧,你可以通过使用管道把 MySQL 的输出直接输入到 redis-cli输入端,...

疯子张
2014/01/15
96
0
Linux的企业-Redis 作 mysql 的缓存服务器

一.配置环境 redhat6.5 server1:lump php模块 172.25.50.1 server2:redis 172.25.50.2 server3:mysql 172.25.50.3 二.安装 lnmp 环境 1.安装php 2.配置nginx 3.配置nginx php默认发布文件......

一百个小排
2017/10/23
0
0
基于标准 oauth2 权限模型开发框架 - ybg_auth

ybgauth 基于标准oauth2权限模型开发框架。 项目介绍 基于开源的pig框架进行改造,使用springboot 开发。入手难度:2年以上开发经验 在线体验:www.88ybg.com 框架需求 一般来说传统的sprin...

Deament
2018/10/08
1K
1

没有更多内容

加载失败,请刷新页面

加载更多

消息中间件——RabbitMQ的高级特性

前言 前面我们介绍了RabbitMQ的安装、各大消息中间件的对比、AMQP核心概念、管控台的使用、快速入门RabbitMQ。本章将介绍RabbitMQ的高级特性。分两篇(上/下)进行介绍。 消息如何保障100%的...

Java架构师ya七
48分钟前
8
0
如何编写高质量的 JS 函数(1) -- 敲山震虎篇

本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/7lCK9cHmunvYlbm7Xi7JxQ 作者:杨昆 一千个读者,有一千个哈姆雷特。 此系列文章将会从函数的执行机制、鲁棒性、函...

vivo互联网技术
今天
7
0
学会这5个Excel技巧,让你拒绝加班

在网上,随处都可以看到Excel技巧,估计已看腻了吧?但下面5个Excel技巧会让你相见恨晚。关键的是它们个个还很实用 图一 技巧1:快速删除边框 有时当我们处理数据需要去掉边框,按Ctrl+Shif...

干货趣分享
今天
11
0
JS基础-该如何理解原型、原型链?

JS的原型、原型链一直是比较难理解的内容,不少初学者甚至有一定经验的老鸟都不一定能完全说清楚,更多的"很可能"是一知半解,而这部分内容又是JS的核心内容,想要技术进阶的话肯定不能对这个...

OBKoro1
今天
11
0
高防CDN的出现是为了解决网站的哪些问题?

高防CDN是为了更好的服务网络而出现的,是通过高防DNS来实现的。高防CDN是通过智能化的系统判断来路,再反馈给用户,可以减轻用户使用过程的复杂程度。通过智能DNS解析,能让网站访问者连接到...

云漫网络Ruan
今天
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部