说明:
本文只是对redis和mysql的数据迁徙作了简单介绍mysql
关于redis+mysql协同:
数据量巨大的状况下,频繁的操做数据库(这里值mysql),可能会形成击穿。而分布式缓存技术已经很成熟。
使用Nosql作缓存,而后异步的写入数据库,从而减少mysql甚至服务器的压力。git
关于redis+mysql应用:
微博固然是最大的redis集群了:
总结了基本流程:
1. 发微博– > 进入消息队列– > 存入MySQL– > 复制到Redis
2. 查询 – > 查询缓存– > 查询Redis – > 查询MySQLgithub
正文:web
既然是二者之间交互,就分为两部分:
mysql to redis
redis to mysql
先看mysql to redis:
mysql to redis 采用的批量插入的方法。
经过对redis 以及 mysql具体数据库,数据表格式的分析,
利用 *.sql的脚本对数据进行选取,再重定向 到 redis中便可。
(使用到了 redis-cli –pipe的选项)redis
先看数据表:
sql
对于每行数据中执行的 Redis命令以下:
HSET events_all_time [action] [count]数据库
利用.sql脚本 执行
api
关于 里面的 * $之类的,是redis数据备份的指定格式缓存
举个例子:
格式说明以下:
*4 #表示有4个参数
$4 #表示“参数”有三个字节(“HSET”字符串为4个字节)
hset #执行的命令服务器
$8 # key有 8个字节
wolys101 #key对应的值
$6 #field对应的长度
passwd #field对应的值
$12 # value的长度
wolysopen111 #value的值
# 一条语句结束
每行默认以 \r\n 结尾
同时在执行玩一行后,以 \r\n 代码一条语句结束
执行以下指令:
mysql -uroot -p redis –skip-column-names –raw < events_to_redis.sql | redis-cli –pipe -a ireanlau
-N, –skip-column-names //不显示列信息
-r, –raw //写列的值而不转义转换。
-a 是redis指定登录密码的选项
操做成功;查看redis
操做成功。
再谈redis to mysql
这里采用C/C++ api
链接redis和 mysql参见博客中相应的博文。
先查看mysql对应数据表中的数据:
redis当前没有键值对
为hash插入 3 个键值对
执行启动脚本:
产看mysql:
操做成功!
自动化功能的实现,计划采用crontab定时功能,定时对两个数据流进行刷入。
至此,全部功能阐述完毕。
完整代码请戳:https://github.com/IreanLau/redis-mysql.git
本手册由ireanlau我的整理,仅供学习交流,不可作商业用途
版权请联系 isislau@yeah.net