redis缓存
缓存静态数据(squid varnish提高用户的访问速度)
缓存动态数据,所有的请求都在数据库/中间件(oneproxy),减轻压力。然后就是redis
redis缓存作用:
可以让数据库更好的减轻压力,缓存动态数据,实现redis与mysql的读写分离。
redis负责读取数据,mysql负责写入。
如果客户端的请求在redis上未命中,则去MySQL进行查询,并由MySQL反馈给客户端,在反馈的同时也会给redis发送一份数据,让redis进行缓存。
redis缓存特点:
1.支持比较小的数据,10MB之下
2.有周期性的,需要设置时间
3.redis先将数据缓存在内存中,可以通过周期,把缓存在内存中的内容通过AOF持久化的和RDB日志的形式写入到硬盘当中,数据不会丢失。
4.不会经常修改的数据,用户信息,商品的简介,商品的分类等
5.查询次数较多的数据的存放在redis中,从而提高用户访问速度
redis穿透
当请求发生异常,redis查询不到对应的数据,会直接去数据库上进行请求,导致数据库的安全性降低。
解决方案:
1.拒绝连接
redis雪崩
当请求量过大,redis查询的时间过长,积压了很多请求导致redis宕机。导致所有的请求堆至数据库当中。
解决方案:
1.设置当前的最大连接
搭建redis缓存服务器
环境拓扑图:
nginx+php:192.168.10.1
mysql:192.168.10.2
redis:192.168.10.3
php服务器设置本地监听端口
[root@localhost ~]# vim /usr/local/php/etc/php-fpm.d/www.conf
listen 192.168.10.1:9000
二.安装redis
[root@localhost ~]# tar -zxvf redis-5.0.5.tar.gz -C /usr/src/
[root@localhost ~]# mv /usr/src/redis-5.0.5/ /usr/local/redis
[root@localhost ~]# cd /usr/local/redis
[root@localhost ~]# make && make install
三.修改redis配置文件
vim /usr/local/redis/redis.conf
69 bind 192.168.10.1 #监听本机
136 daemonize yes #后台运行
[root@localhost redis]# redis-server /usr/local/redis/redis.conf
[root@localhost redis]# netstat -anpe | grep redis
测试是否能够连接redis服务器
[root@localhost redis]# redis-cli -h 192.168.10.1 -p 6379
192.168.10.1:6379>
四、安装php7-redis扩展
1.下载phpredis扩展工具
[root@localhost ~]# wget https://soft.itbulu.com/tools/phpredis-develop.zip
[root@localhost ~]# unzip phpredis-develop.zip
[root@localhost ~]# cd phpredis-develop
2.制作 configure文件
[root@localhost phpredis-master]# /usr/local/php/bin/phpize
3.编译安装
[root@localhost phpredis-develop]# ./configure --with-php-config=/usr/local/php/bin/php-config && make && make install
–出现以下内容说明编译安装成功,redis.so模块就在此目录当中
-Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20180731/
4.进入到这个扩展工具路径
[root@localhost ~]# cd /usr/local/php/lib/php/extensions/no-debug-zts-20180731/
[root@localhost no-debug-zts-20180731]# ls
opcache.a opcache.so redis.so
5.编辑php.ini配置文件
[root@localhost php]# vim /usr/local/php/php.ini
extension="/usr/local/php/"
extension=“redis.so”
[root@localhost php]# systemctl restart php-fpm
[root@localhost php]# bin/php -m | grep redis
---- redis
[root@localhost php]# lynx localhost/index.php
五、mysql上创建一些数据,授权用户让redis访问
mysql> CREATE DATABASE abc;
mysql> USE abc;
mysql> CREATE TABLE test (id int,name varchar(10));
mysql> INSERT INTO test values (1,‘shm’),(2,‘yh’),(3,‘chd’),(4,‘zs’),(5,‘ls’);
mysql> GRANT ALL ON abc.* TO ‘user1’@‘192.168.10.%’ IDENTIFIED BY ‘123.com’;
六、设置redis页面
[root@localhost php]# cd /usr/local/nginx/html/
[root@localhost html]# vim redis.php
<?php
$redis=new Redis;
#redis->connect("redis数据库IP地址",端口号)
$redis->connect("192.168.10.3",6379) or die ("could not connect");
#针对Mysql数据库的操作
$query="select * from abc.test limit 5";
for ($key=1;$key<=5;$key++) {
if (!$redis->get($key)) {
#使用设置好的用户访问MySQL数据库
$conn=mysqli_connect("192.168.10.2","user1","123.com");
#通过mysqli_query程序访问数据库,并做出$query定义好的操作
$result=mysqli_query($conn,$query);
while ($row=mysqli_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>";
}
?>
通过访问redis.php页面,将MySQL数据加载到redis缓存服务器当中
[root@localhost html]# lynx 192.168.10.1/redis.php
在redis数据库中查看是否多出了5条键值对数据
[root@localhost redis]# redis-cli -h 192.168.10.1 -p 6379
[root@localhost html]# lynx 192.168.10.1/redis.php