数据访问流程:

client -> app -> redis -> mysql -> redis -> client
客户端用app访问,先在redis里读数据,因为快,redis没有才去mysql读,
读完保存在redis里,然后返回客户端,下次再读就快

【1】:【server1】

1: #没有killall命令,进行寻找安装
yum whatprovides /usr/bin/killall
yum install -y psmisc-22.20-11.el7.x86_64

redis和mysql配合使用 redis和mysql结合使用_nginx


killall redis-server ##关掉redis进程


/etc/init.d/redis_6379 stop ps aux | grep redis ##查看进程是否完全关闭


关闭之前实验的所有应用,以防影响实验

redis和mysql配合使用 redis和mysql结合使用_redis_02

redis和mysql配合使用 redis和mysql结合使用_redis和mysql配合使用_03


在server1配置nginx和php访问页面2:先配置nginx(nginx只是提供了负载均衡,所以版本要求不高) 解压nginx包
tar zxf nginx-1.17.4.tar.gz

redis和mysql配合使用 redis和mysql结合使用_nginx_04


vim /root/nginx-1.17.4/auto/cc/gcc ##关闭debug


171 # debug


172 #CFLAGS="$CFLAGS -g"


redis和mysql配合使用 redis和mysql结合使用_redis和mysql配合使用_05


编译nginx(编译过程中缺什么补什么)


./configure --prefix=/usr/local/nginx


yum install pcre-devel -y


yum install zlib-devel -y


redis和mysql配合使用 redis和mysql结合使用_redis_06

redis和mysql配合使用 redis和mysql结合使用_mysql_07


redis和mysql配合使用 redis和mysql结合使用_redis_08

redis和mysql配合使用 redis和mysql结合使用_nginx_09


编译成功!!!


make && make install

redis和mysql配合使用 redis和mysql结合使用_redis和mysql配合使用_10


3:配置redis,php页面


自己装的openssl和php的openssl是不一样的


cd /root/redis/rhel7/ --> ls


yum install * -y


redis和mysql配合使用 redis和mysql结合使用_nginx_11


redis和mysql配合使用 redis和mysql结合使用_redis_12


##首先在server1配置好nginx


cd /usr/local/nginx/conf/

vim nginx.conf

2: user  nginx nginx; 
45  index  index.php index.html index.htm;
65         location ~ \.php$ {
66             root           html;
67             fastcgi_pass   127.0.0.1:9000;
68             fastcgi_index    index.php; 
69          #  fastcgi_param  SCRIPT_FILENAME   /scripts$fastcgi_script_name;  
70             include         fastcgi.conf; 
71         }

redis和mysql配合使用 redis和mysql结合使用_redis和mysql配合使用_13


redis和mysql配合使用 redis和mysql结合使用_mysql_14


redis和mysql配合使用 redis和mysql结合使用_nginx_15

useradd nginx ##添加用户
/usr/local/nginx/sbin/nginx #启动并测试nginx
systemctl start php-fpm ##启动php-fpm

redis和mysql配合使用 redis和mysql结合使用_nginx_16


netstat -antlp ##查看端口,80,9000


redis和mysql配合使用 redis和mysql结合使用_mysql_17

【2】:配置server2

【server2】 1: vim /etc/redis/6379.conf
70 bind 0.0.0.0

redis和mysql配合使用 redis和mysql结合使用_redis_18


/etc/init.d/redis_6379 start


redis和mysql配合使用 redis和mysql结合使用_redis和mysql配合使用_19


##在server2上配置redis为master,因为之前做了主从,关闭server1的redis

#如果有key,删除key,del name
[root@server2 ~]# redis-cli
127.0.0.1:6379> get name (nil)

redis和mysql配合使用 redis和mysql结合使用_redis和mysql配合使用_20

2:配置测试页面cd /root/redis/ --> ls
mv test.php /usr/local/nginx/html/
mv test.php index.php ##将test.php 改为index.php

redis和mysql配合使用 redis和mysql结合使用_redis_21

【3】:配置server3

##再开启server3,关闭原来的mysql

[root@server3 ~]# rpm -qa | grep mysql ##旧版本的虚拟机什么也没有 [root@server3 ~]# rpm -e rpm -qa | grep mysql --nodeps 新版本的有东西,需删除
#清除原来数据目录里的内容 cd /var/lib/mysql rm -fr * (我的环境是新的,所以不需要做以上3步操作)

1:安装mariadb,这里试验用这个就行 yum install -y mariadb-*

redis和mysql配合使用 redis和mysql结合使用_redis_22


/var/lib/mysql/ -->ls 什么也没有,环境是干净的


systemctl start mariadb #启动mariadb


redis和mysql配合使用 redis和mysql结合使用_redis_23


2:安全初始化


mysql_secure_installation ##这里密码可以设置为简单的,如redhat,其他回车即可


redis和mysql配合使用 redis和mysql结合使用_redis和mysql配合使用_24


3:#登录数据库,授权用户


mysql -uroot -predhat


MariaDB [(none)]> create database test;


MariaDB [(none)]> grant all on test.* to redis@’%’ identifiedby ‘redhat’;


MariaDB [(none)]> flush privileges;


redis和mysql配合使用 redis和mysql结合使用_nginx_25

【4】【server1】修改nginx的发布文件test.php

vim /usr/local/nginx/html/test.php
3 $redis->connect(‘172.25.78.2’,6379) ##连接redis,即连接server2的6379端口

10 $connect = mysql_connect(‘172.25.78.3’,‘redis’,‘redhat’); ##连接数据库


redis和mysql配合使用 redis和mysql结合使用_mysql_26

【5】【server3】为server3上的mysql的test库加入一些数据

1: cd /root/redis – > ls


vim test.sql ##只是看一下加入的数据


##注释掉的目前用不到,是创建查询的触发器的


redis和mysql配合使用 redis和mysql结合使用_redis和mysql配合使用_27


2:将test.sql的内容导入到数据库中


mysql -predhat < test.sql


redis和mysql配合使用 redis和mysql结合使用_redis和mysql配合使用_28

【6】测试 1:在浏览器测试:

172.25.78.1

##可以看到导入的数据,但是刷新一次后,可以看到后面就从redis读取数据 可以简单的理解为: 第一次访问到后台访问数据库,访问的东西放到redis里面 第二次访问到redis


redis和mysql配合使用 redis和mysql结合使用_mysql_29


redis和mysql配合使用 redis和mysql结合使用_redis和mysql配合使用_30

2:在【server2】使用命令行也可以测试

[root@server2 ~]# redis-cli


127.0.0.1:6379> get 1 “test1”


127.0.0.1:6379> get 2 “test2”


redis和mysql配合使用 redis和mysql结合使用_redis和mysql配合使用_31

【7】这个时候有个问题,如果此时mysql数据发生变更,redis会同步吗?

1:【server3】
MariaDB [test]> select * from test; ##查看之前插入的数据
MariaDB [test]> update test set name=‘westos’ where id=1; ##更新 MariaDB [test]> select * from test;
##更新后的id=1,对应的name为westos

redis和mysql配合使用 redis和mysql结合使用_mysql_32


#变更后发现,redis里没有变,浏览器也看不到变化,但是在redis里做的变化能看到 浏览器:172.25.78.1 刷新,并没有看到更新,这样显然不合理


redis和mysql配合使用 redis和mysql结合使用_redis和mysql配合使用_33

2:配置gearmand

简介:
Gearmand 是一个用来把工作委派给其它机器、分布式的调用更适合做某项工作的机器、并发的做某项工作在多个调用间做负载均衡、或用来调用其它语言的函数的系统。
简单来讲,就是客户端程序把请求提交给 gearmand,gearmand 会把请求转发给合适的 worker 来处理这个请求,最后还通过 gearmand 返回结果。
运行流程:
Client --> Job --> Worker
1、Client 请求发起者,客户端程序可以是任何一种语言,C 、PHP 、Perl 、Python 等。
2、Job 请求调度者,负载协调把 Client 发出的请求转发给合适的 Worker。
3、Worker 请求处理者,处理 Job 分发来的请求,可以是任何一种语言

3:【server1】启动

systemctl start gearmand

redis和mysql配合使用 redis和mysql结合使用_redis和mysql配合使用_34

4:【server3】解压lib_mysqludf_json-master.zipyum whatprovides */unzip
yum install unzip-60.-16.el7.x86_64 -y
##安装解压命令

redis和mysql配合使用 redis和mysql结合使用_redis和mysql配合使用_35

unzip lib_mysqludf_json-master.zip

redis和mysql配合使用 redis和mysql结合使用_nginx_36

yum install -y mariadb-devel.x86_64 #安装mariadb-devel

yum insatl gcc -y

##解决依赖,防止编译的时候出错

redis和mysql配合使用 redis和mysql结合使用_redis_37

> cd /root/redis/lib_mysqludf_json-master

#编译模块(文档上有,注意路径)

gcc $(mysql_config --cflags) -shared -fPIC -o lib_mysqludf_json.so lib_mysqludf_json.c

redis和mysql配合使用 redis和mysql结合使用_nginx_38

cp lib_mysqludf_json.so /usr/lib64/mysql/plugin/ #将模块放到mysql插件目录

redis和mysql配合使用 redis和mysql结合使用_redis和mysql配合使用_39

5:【server3】查看MariaDB [(none)]> show global variables like ‘plugin_dir’;
#注册udf函数
MariaDB [(none)]> CREATE FUNCTION json_object RETURNS STRING SONAME ‘lib_mysqludf_json.so’;

redis和mysql配合使用 redis和mysql结合使用_redis_40

6:#安装插件管理gearman的分布式队列cd redis/ --> ls
tar zxf gearman-mysql-udf-0.6.tar.gz

redis和mysql配合使用 redis和mysql结合使用_redis和mysql配合使用_41

cd redis/rhel7 --> ls

yum install -y libevent-devel-2.0.21-4.el7.x86_64.rpm libgearman-*

redis和mysql配合使用 redis和mysql结合使用_redis_42

7: 编译安装gearman插件

cd /root/redis/gearman-mysql-udf-0.6./configure --libdir=/usr/lib64/mysql/plugin/ --with-mysql make && make install

redis和mysql配合使用 redis和mysql结合使用_nginx_43

redis和mysql配合使用 redis和mysql结合使用_nginx_44

8:注册udf函数

mysql -uroot -predhat

MariaDB [(none)]> CREATE FUNCTION gman_do_background RETURNS STRING SONAME ‘libgearman_mysql_udf.so’;

 MariaDB [(none)]> CREATE FUNCTION gman_servers_set RETURNS STRING SONAME ‘libgearman_mysql_udf.so’;

 MariaDB [(none)]> select * from mysql.func; ##查看函数

 MariaDB [(none)]> SELECT gman_servers_set(‘172.25.78.1:4730’); ##指定gman服务信息



redis和mysql配合使用 redis和mysql结合使用_nginx_45


redis和mysql配合使用 redis和mysql结合使用_nginx_46


9:编写mysql触发器

vim /root/redis/test.sql (将其他的全部注释)

1 use test;  
   5 DELIMITER $$  
   6 CREATE TRIGGER datatoredis AFTER UPDATE ON test FOR  EACH ROW BEGIN 
   7     SET @RECV=gman_do_background('syncToRedis',json_object(NEW.id as `id`, NEW.name as `name`)); 
   8   END$$ 
   9 DELIMITER ;

redis和mysql配合使用 redis和mysql结合使用_mysql_47

重新将文件内容导入数据库

[root@server3 ~]# mysql -p < test.sql

redis和mysql配合使用 redis和mysql结合使用_redis_48

##查看触发器

MariaDB [(none)]> SHOW TRIGGERS FROM test;

redis和mysql配合使用 redis和mysql结合使用_redis和mysql配合使用_49

10:【server1】
编写gman的worker端
cd redis/ --> ls
cp worker.php /usr/local/ vim worker.php
7 $redis->connect(‘172.25.78.2’, 6379);

redis和mysql配合使用 redis和mysql结合使用_redis和mysql配合使用_50

redis和mysql配合使用 redis和mysql结合使用_redis_51

nohup php /usr/local/worker.php &> /dev/null & ##后台运行worker

redis和mysql配合使用 redis和mysql结合使用_redis_52

11:进行测试是否可以同步【server3】修改数据库内容

MariaDB [(none)]> use test;
 MariaDB [test]> update test set name=‘mysql’ where id=2;
 MariaDB [test]> select * from test;

redis和mysql配合使用 redis和mysql结合使用_redis_53

【server2】在redis上查看[root@server2 ~]# redis-cli
127.0.0.1:6379> get 2

redis和mysql配合使用 redis和mysql结合使用_redis_54


浏览器:页面查看,数据同步


redis和mysql配合使用 redis和mysql结合使用_mysql_55