文章目录

  • 一、读写分离的背景
  • 二、搭建nginx+php+redis+mysql
    • 实验环境
    • 实验
      • 1、在server1上安装nginx+php
        • 建立php和redis,mysql的连接
      • 2、在server2上安装redis
      • 3、在server3上安装mysql
      • 浏览器访问测试
      • 测试redis是否会随mysql数据更新而更新

一、读写分离的背景

实际的生产环境当中,客户端对数据库的读操作都是直接找redis拿数据的。
如果redis缓存里面没有数据,那么就会去找mysql拿数据,并且给redis中缓存一份。
redis中的数据有两种情况不能使用:数据过期了或者mysql中的数据更新了。

用户读的时候访问redis,用户写的时候访问mysql
实际上读的需求量是很大的,redis刚好是把数据缓存在内存当中,响应速度也快。也可以降低我们后台mysql数据库的压力。

二、搭建nginx+php+redis+mysql

实验环境

主机名 ip 服务
server1 172.25.1.1 前端服务器nginx
server2 172.25.1.2 redis数据缓存
server3 172.25.1.3 mysql数据库

实验

1、在server1上安装nginx+php

安装nginx并修改配置文件:
步骤一:在网上下载nginx压缩包,解压

步骤二:进入解压目录,修改配置文件

cd nginx-1.14.0
vim src/core/nginx.h#define NGINX_VER          "nginx/" NGINX_VERSION
改为:
#define NGINX_VER          "nginx/"


步骤三:修改源码/auto/cc/gcc文件中

vim auto/cc/gcc
# debug
# CFLAGS="$CFLAGS -g" ##本行注释掉,关闭debug日志模式,


步骤四:安装gcc编译器和openssl-devel

 yum install gcc openssl-devel -y


步骤五:编译

./configure \
###自定义配置:
--prefix=/usr/local/nginx  \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi

步骤六:编译安装

make && make install


步骤七:做启动脚本软链接

 ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/


步骤八:修改配置文件,设置nginx为用户及组并创建用户组

vim /usr/local/nginx/conf/nginx.conf
user nginx nginx; #指定登陆用户 登陆组useradd nginx  #创建用户不能登陆系统,不创建主目录,指定用户用户家目录

步骤九:编辑配置文件

vim /usr/local/nginx/conf/nginx.conf
location / {root   html;index  index.php index.html index.htm;}location ~ \.php$ {root           html;fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;#fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;include        fastcgi.conf;}

步骤十:检测配置文件语法

nginx -t

出现如下报错:
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: [emerg] mkdir() “/var/temp/nginx/client” failed (2: No such file or directory)
nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed


解决:

mkdir -p /var/temp/nginx/client

步骤十一:启动nginx

/usr/local/nginx/sbin/nginx
ps ax #查看进程



安装php:
步骤一:在网上下载安装包

[root@server1 ~]# cd rhel7/
[root@server1 rhel7]# ls
gearmand-1.1.12-18.el7.x86_64.rpm
libevent-devel-2.0.21-4.el7.x86_64.rpm
libgearman-1.1.12-18.el7.x86_64.rpm
libgearman-devel-1.1.12-18.el7.x86_64.rpm
libzip-0.10.1-8.el7.x86_64.rpm
openssl-1.0.2k-16.el7.x86_64.rpm
openssl-libs-1.0.2k-16.el7.x86_64.rpm
php-cli-5.4.16-46.el7.x86_64.rpm
php-common-5.4.16-46.el7.x86_64.rpm
php-fpm-5.4.16-46.el7.x86_64.rpm
php-mysql-5.4.16-46.el7.x86_64.rpm
php-pdo-5.4.16-46.el7.x86_64.rpm
php-pecl-gearman-1.1.2-1.el7.x86_64.rpm
php-pecl-igbinary-1.2.1-1.el7.x86_64.rpm
php-pecl-redis-2.2.8-1.el7.x86_64.rpm
php-process-5.4.16-46.el7.x86_64.rpm
php-xml-5.4.16-46.el7.x86_64.rpm


步骤二:安装

yum install -y *

步骤三:启动php-fpm

systemctl start php-fpm

步骤四:添加php默认发布文件
在/usr/local/nginx/html下创建index.php文件,输入如下内容

 vim /usr/local/nginx/html/index.php<?phpphpinfo();
?>

步骤九:重启nginx,使之关联php

/usr/local/nginx/sbin/nginx -s reload


步骤十:浏览器访问

建立php和redis,mysql的连接

步骤一:在网上下载数据库测试php页面

测试文件test.php内容如下:

<?php$redis = new Redis();$redis->connect('172.25.1.2',6379) or die ("could net connect redis server");#      $query = "select * from test limit 9";$query = "select * from test";for ($key = 1; $key < 10; $key++){if (!$redis->get($key)){$connect = mysql_connect('172.25.1.3','redis','redhat');mysql_select_db(test);$result = mysql_query($query);//如果没有找到$key,就将该查询sql的结果缓存到rediswhile ($row = mysql_fetch_assoc($result)){$redis->set($row['id'],$row['name']);}$myserver = 'mysql';break;}else{$myserver = "redis";$data[$key] = $redis->get($key);}}echo $myserver;echo "<br>";for ($key = 1; $key < 10; $key++){echo "number is <b><font color=#FF0000>$key</font></b>";echo "<br>";echo "name is <b><font color=#FF0000>$data[$key]</font></b>";echo "<br>";}
?>

步骤二:将测试文件test.php放到nginx默认发布目录下,并替换为默认发布文件内容

mv test.php /usr/local/nginx/html/
cd /usr/local/nginx/html/
mv test.php index.php


步骤三:重启nginx

/usr/local/nginx/sbin/nginx -s reload
2、在server2上安装redis

安装redis数据库,作为master

yum install -y gcc   #下载GNU编译器套件gcc
tar zxf redis-5.0.3.tar.gz  #解压redis安装包
cd redis-5.0.3 进入解压目录
make #编译
make install  #安装
cd utils/
./install_server.sh  #执行redis安装服务脚本
vim /etc/redis/6379.conf  #编辑配置文件70 bind 0.0.0.0 #修改监听端口
/etc/init.d/redis_6379 restart #开启redis
netstat -antlp #查看开启端口

步骤一:下载GNU编译器套件gcc

步骤二:解压redis安装包,进入解压目录,进行编译

步骤三:安装

步骤四:执行脚本安装redis

步骤五:修改配置文件/etc/redis/6379.conf中的监听端口,所有人均可连接

步骤六:重启redis

步骤七:查看端口

步骤八:测试

redis-cli
127.0.0.1:6379> info


3、在server3上安装mysql

步骤一:安装数据库

yum install -y mariadb-server


步骤二:启动mariadb

systemctl start mariadb


步骤三:安全初始化

mysql_secure_installation


步骤四:登录数据库,授权用户

[root@server3 ~]# mysql -uroot -p
Enter password:
MariaDB [(none)]> create database test;
MariaDB [(none)]> grant all on test.* to redis@'%' identified by 'redhat';
MariaDB [(none)]> flush privileges;


步骤五:为test数据库导入数据

vim test.sqluse test;
CREATE TABLE `test` (`id` int(7) NOT NULL AUTO_INCREMENT, `name` char(8) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `test` VALUES (1,'test1'),(2,'test2'),(3,'test3'),(4,'test4'),(5,'test5'),(6,'test6'),(7,'test7'),(8,'test8'),(9,'test9');

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

mysql -pwestos < test.sql

浏览器访问测试

注意:刷新一次后,访问的数据就是从redis缓存中读取的数据
此时在server2上也可以查看到

这个时候就需要考虑一个问题:
如果此时mysql数据发生变更,redis会同步吗?
测试一下

测试redis是否会随mysql数据更新而更新

在server3上,更新数据:

MariaDB [test]> update test set name='westos' where id=1;

在server2上查看:
redis上查看到还是原数据,缓存未更新

刷新浏览器:
信息未改变,说明redis不会随mysql数据更新而更新

MySQL与Redis数据库结合——redis作为mysql的缓存服务器,实现读写分离(nginx+php+redis+mysql)相关推荐

  1. 如何最大限度的使用数据库性能,全网最细节讲解缓存方案丨读写分离|连接池|缓存方案|mysql|缓存同步|分库分表

    如何最大限度的使用数据库性能,全网最细节讲解缓存方案 视频讲解如下,点击观看: 如何最大限度的使用数据库性能,全网最细节讲解缓存方案丨读写分离|连接池|缓存方案|mysql|缓存同步|分库分表|c/c ...

  2. win7下mysql读写分离_Windows环境下Mysql 5.7读写分离简单记录

    一.目的 本文记录了在Windows环境中,mysql数据库读写分离配置过程. 二.准备: Master机器:Windows 10 虚拟机,IP:192.168.3.32 Slave机器:Window ...

  3. 数据库之架构:主备+分库?主从+读写分离?

    数据库之架构:主备+分库?主从+读写分离? 原文:数据库之架构:主备+分库?主从+读写分离? 一.数据库架构原则 高可用 高性能 一致性 扩展性 二.常见的架构方案 方案一:主备架构,只有主库提供读写 ...

  4. MySQL 对于千万级的大表要怎么优化?(读写分离、水平拆分、垂直拆分)

    海豚精灵:https://www.whhtjl.com:优课GO:https://mgo.whhtjl.com 思考 如何设计或优化千万级别的大表?此外无其他信息,个人觉得这个话题有点范,就只好简单说 ...

  5. windows mysql读写分离_windows下的MySql实现读写分离

    MySql读写分离 1.删除系统服务 sc delete 服务名 2.复制安装好的3380文件夹到3381 3.进入3381\logs目录下将所有文件删除 4.进入3381\data目录,将所有的lo ...

  6. mysql双机热备 读写分离_轻松搭建MySQL主从复制、读写分离(双机热备)

    主从复制: 当mysql数据库的数据量太大的时候,查询数据就很吃力了,无论怎么优化都会产生瓶颈,这时我们需要增加服务器设备来实现分布式数据库,实现多机热备份,要想实现多机的热备,首先要了解主从数据库服 ...

  7. mysql proxy 多主_mysql多主多从架构与mysql-proxy读写分离

    mysql多主多从架构与mysql-proxy读写分离 最近心血来潮想要部署几台mysql的服务器,实现一个多主多从的服务器架构,并且要在这个架构上利用mysql-proxy实现读写分离操作,之前只是 ...

  8. mysql proxy php_mysql Proxy读写分离配置或php mysql读写分离类

    除了PHP在代码里设置读写分离外,还可以在软件层次读写分离: MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,实现复杂的连接控制和过滤,从而实 ...

  9. mysql 修改表属主_mysql主从配置实现一主一从读写分离

    主从介绍 Mysql主从又叫Replication.AB复制.简单讲就是A与B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,实现数据实时同步 mysql主从是基于binlog,主上需开启b ...

  10. 读写分离 mysql_详解MySQL实现主从复制过程及mycat读写分离步骤

    一.什么是主从复制 将主数据库中的DDL和DML操作通过二进制日志(BINLOG)传输到从数据库上,然后将这些日志重新执行(重做):从而使得从数据库的数据与主数据库保持一致. 二.主从复制的作用 1. ...

最新文章

  1. cufflinks基于dataframe数据自定义绘图基于df.iplot功能
  2. 奇葩面试经历分享:喊价25K,HR 却给了30K!
  3. 【VMCloud云平台进阶篇】Monitor监控(一)
  4. C/C++语言之通过定义指针函数方式来实现在一个cpp文件里面获取另外一个cpp文件函数的返回值
  5. 一分二功率分配器_一文学会微波功率分配器
  6. Spring Boot 之 elasticsearch
  7. 搭载麒麟990 5G SoC 华为MatePad Pro 5G全球首发
  8. Python学习之路day01——002简单数据类型
  9. cssci核心期刊(cssci核心期刊目录)
  10. 计算机一级wpsoffice知识,全国计算机一级WPSOffice考试试题
  11. oracle 查询优化
  12. 合并Python列表的魔幻12法
  13. python词云图片生成不出来_python实现使用词云展示图片
  14. win10电脑如何取得管理员权限
  15. 2021-05-26SEO关键词KPI考核指标有哪些
  16. android 平板的 dpi,Android平板上开发应用的一点心得——精确适配不同的dpi和屏幕尺寸...
  17. C语言初阶:进制,计算机的美丽语言
  18. 塑胶模具设计中行位原理,值得收藏
  19. 【转】为什么要使用ModelDriven
  20. 爬取天气时常用的城市代码(备忘)

热门文章

  1. ERP实施手记:生不如死的二次开发
  2. mysql通过dts迁移至达梦
  3. 单臂路由配置实例讲解
  4. java实现百度地铁数据下载和处理
  5. python语言学习零基础教学视频_零基础学Python语言CAP全套课程
  6. 港股交易软件重要吗?有哪些港股交易入门知识需要掌握
  7. 无尽的永恒什么用 dnf大转移无尽的永恒有什么用 怎么得 会涨价吗
  8. Android 系统级APP 升级方案 OTA全流程
  9. Photoshop的评价
  10. Android使用apng图片