Redis 缓存MySQL 中的数据
实验环境:
Host | IP | 环境 |
---|---|---|
Redis | 1.1.1.102 | LNMP |
实验目的
- Redis 将MySQL中的数据缓存至 Redis中
1) 将LNMP 中的IP地址改为本身的地址(php-rpm、nginx)
- Nginx
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name 1.1.1.102;
location ~ \.php$ {
root html;
fastcgi_pass 1.1.1.102:9000;
# 重启服务
[root@localhost ~]# killall nginx
[root@localhost ~]# nginx
[root@localhost ~]# netstat -anpt | grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 117611/nginx: maste
- PHP_FPM
[root@localhost ~]# vim /usr/local/php/etc/php-fpm.conf
listen = 1.1.1.102:9000
# 重启服务
[root@localhost ~]# systemctl restart php-fpm
[root@localhost ~]# netstat -anpt | grep php-fpm
tcp 0 0 1.1.1.102:9000 0.0.0.0:* LISTEN 117628/php-fpm: mas
- 添加测试动态页面程序
[root@localhost ~]# vim /usr/local/nginx/html/index.php
<?php
phpinfo()
?>
2) 安装Redis
- 安装Redis,解压后直接在源码包中进行编译安装
[root@localhost ~]# tar -zxf redis-4.0.6.tar.gz -C /usr/src/
[root@localhost ~]# cp -r /usr/src/redis-4.0.6/ /usr/local/redis
[root@localhost ~]# cd /usr/local/redis/
[root@localhost redis]# make && make install
3) 修改 Redis 配置文件并运行Redis
- 修改配置文件
[root@localhost redis]# vim /usr/local/redis/redis.conf
bind 1.1.1.102 # 指定监听地址
daemonize yes # 允许后台运行
- 运行Redis(redis-server 配置文件路径)
- redis-server 启动命令字,指定redis 配置文件
[root@localhost redis]# redis-server /usr/local/redis/redis.conf
[root@localhost redis]# netstat -anpt | grep redis
tcp 0 0 1.1.1.102:6379 0.0.0.0:* LISTEN 120987/redis-server
4) 安装phpredis-mater 程序
- 用于在 PHP中安装 redis 模块,将redis 模块插入 PHP中,使 redis 与 MySQL 可以通过PHP进行沟通
[root@localhost ~]# unzip phpredis-master.zip # 使用 unzip 解压
[root@localhost ~]# cd phpredis-master
[root@localhost phpredis-master]# ln -s /usr/local/php/sbin/* /usr/sbin/
[root@localhost phpredis-master]# ln -s /usr/local/php/bin/* /usr/bin/
- 该源码中 没有 configure 程序,使用phpize 生成
[root@localhost phpredis-master]# phpize
- 编译安装
- –with-php-config=/usr/local/php/bin/php-config 指定PHP连接的配置文件
[root@localhost phpredis-master]# ./configure --with-php-config=/usr/local/php/bin/php-config && make && make install
- 根据安装完成的提示,会提示一个路径,这个路径 是 redis.so 模块的目录
[root@localhost phpredis-master]# ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/
redis.so
- 将 redis.so 模块 ,添加至 php.ini 配置文件中的最后一行
- 添加至末尾
[root@localhost phpredis-master]# vim /usr/local/php/lib/php.ini
extension = redis.so
- 重启服务(php-fpm)
[root@localhost phpredis-master]# systemctl restart php-fpm
- 访问 测试页面
- 查看 redis 模块,是否添加
5) 部署Mysql
-
为了实验目的,需要手动再 MySQL中 创建数据,来完成实验
-
创建授权用户,用于缓存数据内容
mysql> USE abc;
Database changed
mysql> CREATE TABLE test(id INT, name VARCHAR(10));
Query OK, 0 rows affected (0.11 sec)
mysql> INSERT INTO test values(1,'one'),(2,'two'),(3,'three'),(4,'four'), (5,'five');
Query OK, 5 rows affected (0.01 sec)
Records: 5 Duplicates: 0 Warnings: 0
mysql> GRANT ALL ON abc.test TO 'root'@'1.1.1.%' IDENTIFIED BY '123.com';
Query OK, 0 rows affected (0.38 sec)
6) 编写测试程序
- 用于缓存MySQL数据
[root@localhost ~]# vim /usr/local/nginx/html/index.php
<?php
$redis=new Redis;
$redis->connect("1.1.1.102",6379) or die ("could not connect");
$query="select * from abc.test limit 5";
for ($key=1;$key<=5;$key++) {
if (!$redis->get($key)) {
$conn=mysql_connect("1.1.1.102","root","123.com");
$result=mysql_query($query);
while ($row=mysql_fetch_assoc($result)) {
$redis->set($row["id"],$row["name"]);
}
break;
}
else {
$name="redis";
$data[$key]=$redis->get($key);
}
}
echo $name;
echo "<br>";
for ($key=1;$key<=5;$key++) {
echo "id is $key";
echo "<br>";
echo "name is $data[$key]";
echo "<br>";
}
<?php
$redis=new Redis; # 定义 一个 Redis 的对选
$redis->connect("1.1.1.102",6379) or die ("could not connect"); # 指定 redis 数据库
$query="select * from abc.test limit 5"; # 获取 MySQL中数据库的 数据
for ($key=1;$key<=5;$key++) {
if (!$redis->get($key)) { # 判断,如果客户端请求未命中
$conn=mysql_connect("1.1.1.102","root","123.com"); # 则去访问数据库,读取数据
$result=mysql_query($query); # 读取数据
while ($row=mysql_fetch_assoc($result)) { # 去 后端循环抓取
$redis->set($row["id"],$row["name"]);
}
break;
}
else { # 判断,如果客户端命中
$name="redis"; # 输出第一行内容
$data[$key]=$redis->get($key); # 返回客户端想要数据
}
}
echo $name; # 以下为客户端浏览器显示出的内容
echo "<br>";
for ($key=1;$key<=5;$key++) {
echo "id is $key";
echo "<br>";
echo "name is $data[$key]";
echo "<br>";
}
- 浏览器访问