redis+mysql数据同步(协同)C/C++实现

mysql -- 同步程序 -- redis --- App

同步程序:处理mysql-redis间数据同步,1。mysql to redis 2.redis to mysql

redis和mysql数据的同步,代码级别大致可以这样做:
读: 读redis->没有,读mysql->把mysql数据写回redis
写: 写mysql->成功,写redis



并发不高的情况:
读: 读redis->没有,读mysql->把mysql数据写回redis,有的话直接从redis中取;
写: 写mysql->成功,再写redis;

并发高的情况:
读: 读redis->没有,读mysql->把mysql数据写回redis,有的话直接从redis中取;
写:异步话,先写入redis的缓存,就直接返回;定期或特定动作将数据保存到mysql,可以做到多次更新,一次保存;


关于redis+mysql协同: 
数据量巨大的情况下,频繁的操作数据库(这里值mysql),可能会造成击穿。而分布式缓存技术已经很成熟。 
使用Nosql做缓存,然后异步的写入数据库,从而减小mysql甚至服务器的压力。

关于redis+mysql应用: 
微博当然是最大的redis集群了: 
总结了基本流程: 
1. 发微博– > 进入消息队列– > 存入MySQL– > 复制到Redis 
2. 查询 – > 查询缓存– > 查询Redis – > 查询MySQL

正文:

既然是两者之间交互,就分为两部分:
mysql to redis
redis to mysql
  • 1
  • 2
  • 3
  • 4

先看mysql to redis: 
mysql to redis 采用的批量插入的方法。 
通过对redis 以及 mysql具体数据库,数据表格式的分析, 
利用 *.sql的脚本对数据进行选取,再重定向 到 redis中即可。 
(使用到了 redis-cli –pipe的选项)

先看数据表: 
这里写图片描述 
这里写图片描述 
这里写图片描述

对于每行数据中执行的 Redis命令如下: 
HSET events_all_time [action] [count]

利用.sql脚本 执行 
这里写图片描述

关于 里面的 * $之类的,是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定时功能,定时对两个数据流进行刷入。

至此,所有功能阐述完毕。

http://blog.csdn.net/irean_lau/article/details/51395515

你可能感兴趣的:(redis)