浅谈 Redis 与 MySQL 的耦合性以及利用管道完成 MySQL 到 Redis 的高效迁移
http://blog.csdn.net/dba_waterbin/article/details/8996872
㈠ Redis 与 MySQL 的耦合性
在业务架构早期、我们便该"吃着碗里的看着锅里的"、切莫让MySQL 有梦、而Redis 无心
毕竟、有些关系型的结构不适合放到Redis跑、"男女搭配、干活不累"嘛、推荐让MySQL与Redis喜结连理
其次、这 2 人、一般是在不同场景做选择、而不会在性能上选择、
只有在 2 者都可用的情况下、综合性能、硬件成本、运维成本等选择
比如、网页游戏启用 Redis+MySQL:
游戏中的:好友关系、排行榜、计数器、队列、cache都很适合通过 Redis来实现
再举个例子是新浪微博的架构、比如用户关注关系:
在 MySQL中是 <粉丝,关注的人>这样一行一行存储的。而在 Redis中你可以存成一个set,或者zset等
大体流程是由 MySQL 复制到 Redis 的
基本结构应该是:
1. 发微博-- > 进入消息队列-- > 存入MySQL-- > 复制到Redis
2. 查询 -- > 查询缓存-- > 查询Redis -- > 查询MySQL
㈡ 快速迁移 MySQL →→ Redis
① MySQL 要导出的表 david_lin
- mysql> desc david_lin;
- +---------+-------------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +---------+-------------+------+-----+---------+-------+
- | id | int(11) | NO | PRI | NULL | |
- | myname | varchar(25) | NO | UNI | NULL | |
- | mymoney | int(11) | NO | | 0 | |
- +---------+-------------+------+-----+---------+-------+
- mysql> select * from david_lin;
- +----+--------+---------+
- | id | myname | mymoney |
- +----+--------+---------+
- | 1 | david | 100000 |
- | 2 | rocky | 200000 |
- +----+--------+---------+
② 编写导出脚本
每行数据中执行的 Redis命令如下:
HSET david_lin [myname] [mymoney]
- [root@odd ~]# cat mysql_to_redis.sql
- 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,
- mymoney AS hval
- FROM david_lin
- ) AS t
③ 开始导入
- [root@odd ~]# mysql -uroot -poracle test --skip-column-names --raw < mysql_to_redis.sql | redis-cli --pipe
- All data transferred. Waiting for the last reply...
- Last reply received from server.
- errors: 0, replies: 0
④ 在Redis 里查询
- redis 127.0.0.1:6379> hgetall david
- 1) "david"
- 2) "100000"
- 3) "rocky"
- 4) "200000"
这里仅是个 demo、数据量小、不过、看这结果、有些类似行转列哈、列运算了、有木有 :)
浅谈 Redis 与 MySQL 的耦合性以及利用管道完成 MySQL 到 Redis 的高效迁移的更多相关文章
- 浅谈SQL优化入门:2、等值连接和EXPLAIN(MySQL)
1.等值连接:显性连接和隐性连接 在<MySQL必知必会>中对于等值连接有提到两种方式,第一种是直接在WHERE子句中规定如何关联即可,那么第二种则是使用INNER JOIN关键字.如下例 ...
- 浅谈 Vue v-model指令的实现原理 - 如何利用v-model设计自定义的表单组件
原文请点击此链接 链接1 http://www.7zhang.com/index/cms/read/id/234515.html 链接2 http://blog.csdn.net/yangbing ...
- MySql(一)_利用NHibernate和MySql交互
1.基础配置,添加MySql和nHibernate的引用 (1) 添加引用,导入MySql.data.dll: 利用MySql提供的API操作: (2) 添加引用,导入NHibernate.d ...
- 浅谈MySQL架构体系
一 数据库和数据库实例 在MySQL的学习研究中,存在两个非常容易混淆的概念,即数据库和数据库实例.在MySQL中,数据库和数据库实例定义如下: 数据库:存储数据的集合: 数据库实例:操作数据库的集 ...
- Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理
基于python+mysql浅谈redis缓存设计与数据库关联数据处理 by:授客 QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3 ...
- 浅谈:Redis持久化机制(一)RDB篇
浅谈:Redis持久化机制(一)RDB篇 众所周知,redis是一款性能极高,基于内存的键值对NoSql数据库,官方显示,它的读效率可达到11万次每秒,写效率能达到8万次每秒,因为它基于内存以及存 ...
- 浅谈MySQL存储引擎-InnoDB&MyISAM
存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取.MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式是不同的.每一种存储引擎都有它的优势和劣势,本文只讨论最常见 ...
- 重新学习MySQL数据库6:浅谈MySQL的中事务与锁
『浅入深出』MySQL 中事务的实现 在关系型数据库中,事务的重要性不言而喻,只要对数据库稍有了解的人都知道事务具有 ACID 四个基本属性,而我们不知道的可能就是数据库是如何实现这四个属性的:在这篇 ...
- 浅谈:redis的主从复制 + 哨兵模式
浅谈:redis的主从复制 + 哨兵模式 主从模式 在谈论redis的主从复制之前,我们先回想下mysql的主从搭建过程,第一步呢首先要在主库服务器中修改my.cnf,开启一下bin_log功能, ...
随机推荐
- python投票统计程序,统计序列中各个数值的份数,字典的应用。
这里可能会用到字典的知识, 字典主要是用来存储最后的统计结果. 字典的用法:http://www.runoob.com/python/python-dictionary.html https://ww ...
- C#泛型(一)泛型方法
namespace GenericsTest { class Program { // https://www.cnblogs.com/dotnet261010/p/9034594.html stat ...
- iOS ERROR: unable to get the receiver data from the DB 解决方式
这个错误通常发生在iOS7其中,可能是缓存的导致的问题. 解决步骤: 右击Finder,选择 Go to Folder 复制上:"~/Library/Application Support/ ...
- Android实践之ScrollView中滑动冲突处理
转载注明出处:http://blog.csdn.net/xiaohanluo/article/details/52130923 1. 前言 在Android开发中,假设是一些简单的布局.都非常easy ...
- 编程一一C语言问题,指针函数与函数指针
资料来源于网上: 一.指针函数:指返回值是指针的函数 类型标识符 *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个地址值.函数返 ...
- WSDL文档框架
- 驱动学习3-make
在向内核中添加驱动的时候要完成3项工作 (1)在Kconfig中添加新代码对应项目的编译条件(下面Makefile文件中需要用到它定义的的宏变量) (2)将驱动源码添加到对应的目录中 (3)在目录Ma ...
- Java 学习(18):Java 序列化& 网络编程& 发送邮件
--Java 序列化 -- 网络编程 -- 发送邮件 Java 序列化 Java 提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据.有关对象的类型的信 ...
- dinic算法学习(以poj1273为例)
Dinic 算法模板 Dinic算法是一种比較easy实现的.相对照较快的最大流算法. 求最大流的本质,就是不停的寻找增广路径.直到找不到增广路径为止. 对于这个一般性的过程,Dinic算法的优化例 ...
- LA 3135 - Argus
看题:传送门 大意就是让你编写一个称为argus的系统,这个系统支持一个register的命令: Register Q_num Period 该命令注册了一个触发器,它每Period秒就会残生一个编 ...