MySQL与Redis数据库结合——redis作为mysql的缓存服务器,实现读写分离(nginx+php+redis+mysql)
文章目录
- 一、读写分离的背景
- 二、搭建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)相关推荐
- 如何最大限度的使用数据库性能,全网最细节讲解缓存方案丨读写分离|连接池|缓存方案|mysql|缓存同步|分库分表
如何最大限度的使用数据库性能,全网最细节讲解缓存方案 视频讲解如下,点击观看: 如何最大限度的使用数据库性能,全网最细节讲解缓存方案丨读写分离|连接池|缓存方案|mysql|缓存同步|分库分表|c/c ...
- win7下mysql读写分离_Windows环境下Mysql 5.7读写分离简单记录
一.目的 本文记录了在Windows环境中,mysql数据库读写分离配置过程. 二.准备: Master机器:Windows 10 虚拟机,IP:192.168.3.32 Slave机器:Window ...
- 数据库之架构:主备+分库?主从+读写分离?
数据库之架构:主备+分库?主从+读写分离? 原文:数据库之架构:主备+分库?主从+读写分离? 一.数据库架构原则 高可用 高性能 一致性 扩展性 二.常见的架构方案 方案一:主备架构,只有主库提供读写 ...
- MySQL 对于千万级的大表要怎么优化?(读写分离、水平拆分、垂直拆分)
海豚精灵:https://www.whhtjl.com:优课GO:https://mgo.whhtjl.com 思考 如何设计或优化千万级别的大表?此外无其他信息,个人觉得这个话题有点范,就只好简单说 ...
- windows mysql读写分离_windows下的MySql实现读写分离
MySql读写分离 1.删除系统服务 sc delete 服务名 2.复制安装好的3380文件夹到3381 3.进入3381\logs目录下将所有文件删除 4.进入3381\data目录,将所有的lo ...
- mysql双机热备 读写分离_轻松搭建MySQL主从复制、读写分离(双机热备)
主从复制: 当mysql数据库的数据量太大的时候,查询数据就很吃力了,无论怎么优化都会产生瓶颈,这时我们需要增加服务器设备来实现分布式数据库,实现多机热备份,要想实现多机的热备,首先要了解主从数据库服 ...
- mysql proxy 多主_mysql多主多从架构与mysql-proxy读写分离
mysql多主多从架构与mysql-proxy读写分离 最近心血来潮想要部署几台mysql的服务器,实现一个多主多从的服务器架构,并且要在这个架构上利用mysql-proxy实现读写分离操作,之前只是 ...
- mysql proxy php_mysql Proxy读写分离配置或php mysql读写分离类
除了PHP在代码里设置读写分离外,还可以在软件层次读写分离: MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,实现复杂的连接控制和过滤,从而实 ...
- mysql 修改表属主_mysql主从配置实现一主一从读写分离
主从介绍 Mysql主从又叫Replication.AB复制.简单讲就是A与B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,实现数据实时同步 mysql主从是基于binlog,主上需开启b ...
- 读写分离 mysql_详解MySQL实现主从复制过程及mycat读写分离步骤
一.什么是主从复制 将主数据库中的DDL和DML操作通过二进制日志(BINLOG)传输到从数据库上,然后将这些日志重新执行(重做):从而使得从数据库的数据与主数据库保持一致. 二.主从复制的作用 1. ...
最新文章
- cufflinks基于dataframe数据自定义绘图基于df.iplot功能
- 奇葩面试经历分享:喊价25K,HR 却给了30K!
- 【VMCloud云平台进阶篇】Monitor监控(一)
- C/C++语言之通过定义指针函数方式来实现在一个cpp文件里面获取另外一个cpp文件函数的返回值
- 一分二功率分配器_一文学会微波功率分配器
- Spring Boot 之 elasticsearch
- 搭载麒麟990 5G SoC 华为MatePad Pro 5G全球首发
- Python学习之路day01——002简单数据类型
- cssci核心期刊(cssci核心期刊目录)
- 计算机一级wpsoffice知识,全国计算机一级WPSOffice考试试题
- oracle 查询优化
- 合并Python列表的魔幻12法
- python词云图片生成不出来_python实现使用词云展示图片
- win10电脑如何取得管理员权限
- 2021-05-26SEO关键词KPI考核指标有哪些
- android 平板的 dpi,Android平板上开发应用的一点心得——精确适配不同的dpi和屏幕尺寸...
- C语言初阶:进制,计算机的美丽语言
- 塑胶模具设计中行位原理,值得收藏
- 【转】为什么要使用ModelDriven
- 爬取天气时常用的城市代码(备忘)