1.读写分离的背景
实际的生产环境当中,客户端对数据库的读操作都是直接找redis拿数据的
如果redis缓存里面没有数据,那么就会去找mysql拿数据,并且给redis中缓存一份
redis中的数据有两种情况不能使用:数据过期了或者mysql中的数据更新了
用户读的时候访问redis,用户写的时候访问mysql
实际上读的需求量是很大的,redis刚好是把数据缓存在内存当中,响应速度也快
也可以降低我们后台mysql数据库的压力

一般对于高并发的系统来说,搭建一个健壮的缓存系统是不可避免的。
单机的reids的QPS(每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准)可能只能上万,如果有再高并发的场景,单机是不能搞定的,就会有它的系统瓶颈。
一般来说缓存是用来支撑高并发读,这时候我们可能就会想到读写分离;
读写分离是用来处理读的并发量大,而写的并发量小的场景。

2.搭建基本的实验环境
172.25.15.1(server1) 前端服务器
172.25.15.2(server2) redis数据缓存
172.25.15.3(server3) mysql数据库

(2)停止server1和server3上面的redis服务

Redis读写分离怎么分发数据 redis+mysql读写分离流程_数据


Redis读写分离怎么分发数据 redis+mysql读写分离流程_数据库_02


(3)开启server2上面的redis服务,并且查看redis节点是否为master节点,并且没有slave节点

Redis读写分离怎么分发数据 redis+mysql读写分离流程_Redis读写分离怎么分发数据_03


此时的server2 是master节点,并且没有slave

Redis读写分离怎么分发数据 redis+mysql读写分离流程_redis_04


Redis读写分离怎么分发数据 redis+mysql读写分离流程_数据_05


3.基本读写分离的具体过程如下

(1)在server1上安装前端服务器需要的服务

yum install -y httpd php php-mysql

Redis读写分离怎么分发数据 redis+mysql读写分离流程_数据库_06


(2)在server3上安装数据库

yum install -y mariadb-server

Redis读写分离怎么分发数据 redis+mysql读写分离流程_Redis读写分离怎么分发数据_07


(3)在真机上给前端服务器server1传送php脚本

Redis读写分离怎么分发数据 redis+mysql读写分离流程_数据库_08


(4)编辑查看这个脚本

Redis读写分离怎么分发数据 redis+mysql读写分离流程_数据_09


(5)在server3上面开启数据库并且查看

Redis读写分离怎么分发数据 redis+mysql读写分离流程_redis_10


发现test数据库里面没有任何表格

Redis读写分离怎么分发数据 redis+mysql读写分离流程_数据库_11


(6)在真机上给数据库端server3传送sql脚本

Redis读写分离怎么分发数据 redis+mysql读写分离流程_数据库_12


(7)将数据导入数据库

Redis读写分离怎么分发数据 redis+mysql读写分离流程_redis_13


(8)再次查看数据库,发现test数据库里面表格和数据了

Redis读写分离怎么分发数据 redis+mysql读写分离流程_redis_14


(9)发现server1前端php里面有mysql模块,但是没有redis模块

Redis读写分离怎么分发数据 redis+mysql读写分离流程_redis_15


(10)将server1上的测试脚本移动到默认发布目录下面

Redis读写分离怎么分发数据 redis+mysql读写分离流程_数据库_16


(11)修改前端的php脚本

使得用户访问数据的时候先去找redis模块拿数据,如果redis模块没有数据或者数据已经过期

则用户就会去找mysql拿数据

Redis读写分离怎么分发数据 redis+mysql读写分离流程_数据_17


(12)在数据库上进行授权
使得前端服务器可以调用后台的数据库

Redis读写分离怎么分发数据 redis+mysql读写分离流程_redis_18


(13)在浏览器里面测试:访问前端服务器
此时没有数据的原因是php里面没有redis模块

Redis读写分离怎么分发数据 redis+mysql读写分离流程_数据库_19


(14)现在加入redis模块

Redis读写分离怎么分发数据 redis+mysql读写分离流程_redis_20


Redis读写分离怎么分发数据 redis+mysql读写分离流程_Redis读写分离怎么分发数据_21


Redis读写分离怎么分发数据 redis+mysql读写分离流程_数据库_22


Redis读写分离怎么分发数据 redis+mysql读写分离流程_数据_23


用phpize生成configure文件

Redis读写分离怎么分发数据 redis+mysql读写分离流程_redis_24


Redis读写分离怎么分发数据 redis+mysql读写分离流程_数据_25


把redis模块编译到php中

Redis读写分离怎么分发数据 redis+mysql读写分离流程_数据库_26


make && make install

Redis读写分离怎么分发数据 redis+mysql读写分离流程_数据_27


Redis读写分离怎么分发数据 redis+mysql读写分离流程_数据_28


vim /etc/php.ini

Redis读写分离怎么分发数据 redis+mysql读写分离流程_Redis读写分离怎么分发数据_29


cd /etc/php.d

Redis读写分离怎么分发数据 redis+mysql读写分离流程_数据_30


重启httpd服务 此时已经加入redis模块

Redis读写分离怎么分发数据 redis+mysql读写分离流程_数据库_31


(15)在浏览器里面再次访问

Redis读写分离怎么分发数据 redis+mysql读写分离流程_Redis读写分离怎么分发数据_32


发现此时客户端访问到了mysql数据库的信息
因为此时redis数据库里面还没有数据,因此第一次会去找mysql数据库拿数据
拿完数据之后也会给redis缓存一份,再次刷新变成了从redis拿数据

Redis读写分离怎么分发数据 redis+mysql读写分离流程_Redis读写分离怎么分发数据_33


(16)在server3上修改数据库里面表格的名称

Redis读写分离怎么分发数据 redis+mysql读写分离流程_数据库_34


(17)发现redis里面的缓存并没有同步mysql的更新

Redis读写分离怎么分发数据 redis+mysql读写分离流程_数据库_35


Redis读写分离怎么分发数据 redis+mysql读写分离流程_数据库_36


(18)手动删除redis上原来的缓存

Redis读写分离怎么分发数据 redis+mysql读写分离流程_数据_37


(19)再次访问就会去mysql里面拿数据

Redis读写分离怎么分发数据 redis+mysql读写分离流程_数据_38


再次刷新

Redis读写分离怎么分发数据 redis+mysql读写分离流程_数据_39


在redis里面也会缓存新的数据

Redis读写分离怎么分发数据 redis+mysql读写分离流程_Redis读写分离怎么分发数据_40