Redis介绍
非关系型数据库,基于键值对进行存储数据,可以用来缓存动态数据,将动态数据缓存在内存中,通过aof或者持久化方式写入到硬盘中

特点:
支持多种数据类型
支持分布式存储
功能丰富

常用命令

1
2
3
4
5
6
7
8
9
10
set key value	:添加键值对
get key:查看指定键对应的值
mset key1 value [key2 value2]... :批量创建键值对
mget key1 [key2]...:批量查看键对应的值
del key1 [key2]..:批量删除键值对
append key value:对指定键的值进行追加
select index:切换数据库
move key db:迁移数据
keys *:查看当前数据库中所有的键值对
flushall:清空redis中所有键值对

Redis缓存搭建
Redis缓存lnmp中MySQL的数据,通过php中间件

实验环境

一台lnmp环境的linux即可

最终效果

用户多次访问动态页面时,从redis缓存中读取数据

调整php-fpm配置文件

1
2
3
4
vim /usr/local/php5/etc/php-fpm.conf
listen = 172.16.1.12:9000 # 本机ip
systemctl restart php-fpm
# 重启php-fpm

调整nginx配置文件

1
2
3
4
5
6
7
8
9
10
11
vim /usr/local/nginx/conf/nginx.conf
location ~ \.php$ {
root html;
fastcgi_pass 172.16.1.12:9000; # 改为本机地址
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi.conf;
}

systemctl restart nginx
# 重启nginx

安装Redis数据库

1
2
3
4
tar zxf redis-4.0.6.tar.gz -C /usr/src
mv /usr/src/redis-4.0.6 /usr/local/redis
cd /usr/local/redis/
make && make install

调整Redis配置文件

1
2
3
vi /usr/local/redis/redis.conf 
bind 192.168.1.5 # 监听本机ip
daemonize yes # 允许后台运行

启动redis服务

1
redis-server /usr/local/redis/redis.conf 

登录Redis数据库

1
redis-cli -h 192.168.1.5 -p 6379

编译安装Redis的php模块

1
2
3
4
unzip phpredis-master.zip
cd phpredis-master/
phpize # 生成configure文件
./configure --with-php-config=/usr/local/php5/bin/php-config && make && make install

验证生成的Redis模块

1
2
3
cd /usr/local/php5/lib/php/extensions/no-debug-non-zts-20121212/
ls
opcache.a opcache.so redis.so

将生成的redis模块与php整合

1
2
vi /usr/local/php5/php.ini 
extension = redis.so

重启php-fpm

1
systemctl restart php-fpm

编写php测试页面

1
2
3
4
vim /usr/local/nginx/html/index.php
<?php
phpinfo();
?>

访问172.16.1.12/index.php,验证是否成功,在页面中找到如图所示,即是成功

upload successful

登录mysql授权php可以登录的用户,用于验证redis缓存数据

1
2
3
4
5
6
7
8
9
10
mysql -u root -p123.com
mysql> create database abc;

mysql> use abc;

mysql> create table test(id int,name varchar(30));

mysql> insert into test values(1,'cyj'),(2,'pjf'),(3,'fy'),(4,'mp'),(5,'fm');

grant all on abc.test to 'root'@'192.168.1.5' identified by '123.com';

重新编写php页面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
vim /usr/local/nginx/html/index.php 
<?php
$redis=new Redis;
$redis->connect("172.16.1.12",6379) or die ("could not connect"); # 本机ip及redis端口号
$query="select * from abc.test limit 5";
for ($key=1;$key<=5;$key++) {
if (!$redis->get($key)) {
$conn=mysqli_connect("172.16.1.12","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>";
}
?>

访问172.16.1.12/index.php进行验证

第一次数据从数据库中调取,第二次从redis缓存调取