redis持久化、redis+mysql+nginx+php整合
- reids持久化
- myslq+redis+nginx+php整合
- myslq+redis+nginx+php整合
- redis与mysql的数据同步
reids持久化
myslq+redis+nginx+php整合
因为redis是在内存中工作的,速度快,所以 redis可以放在mysql之前,充当缓存使用。
应用需要写入数据时,就向mysql写。应用读取数据时,就从redis中读。所以就需要做好mysql与redis的自动同步。
方式一:
应用直接使用redis,在redis端需要编写代码将最终数据同步到mysql,以实现数据一致性。
方式二:
更适合大规模应用。
下面的实验是使用的用户自定义函数。
myslq+redis+nginx+php整合
server2 ---- 172.20.10.6 ---- redis master (缓冲层)
server3 ---- 172.20.10.8 ---- nginx 、php、gearmand (前端)
server 5 ---- 172.20.10.11 ---- mariadb (后台)
分布式的分发框架
client (server5): MySQL发生了update事件,触发trigger。触发器会调用用户自定义udf函数json_object(用于转换数据,因为mysql与redis数据不兼容),之后把数据发给gearman(gman_server_set、gman_do_background)
server (server3) :gearmand,监听4730端口
worker (server3): 用户端自己写的代码worker.php,也可以用其他语言编写比如Java(作用就是从gearmand中获取任务,同步redis)。php要求支持两个模块:gearman模块和redis模块。。worker.php首先会通过php-gearman模块获取任务,再通过php-redis模块更新redis server,以完成redis的更新。框架中redis与mysql上数据必须是同步的,怎么样使得mysql上的数据更新之后自动同步到redis?
使用触发器。
mysql想要将变更数据传给远端,需要:
1、转换成json的数据结构
2、发布到分布式的分发系统上面
发现redis中只要有一个数据缺失,就会从mysql中将整体数据都加载一遍。不够优化。如何实现异步变更呢?即redis上只有这一个数据变更,那么只需要从mysql上将这一个数据加载一遍就行了。所以需要将redis和mysql同步。当mysql更新了,那么就立即更新redis。
redis与mysql的数据同步
到目前为止,nginx、php、redis、mysql已经可以整合一起工作了,但是还需要将redis和mysql上的数据同步。怎么样使得mysql上的数据更新之后自动同步到redis?
使用触发器。
mysql想要将变更数据传给远端,需要:
1、转换成json的数据结构
2、发布到分布式的分发系统上面