MENU

Redis缓存

• 2020 年 10 月 28 日 • 默认分类,Linux,Redis

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

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

常用命令

CODE
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配置文件

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

调整nginx配置文件

CODE
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数据库

CODE
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配置文件

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

启动redis服务

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

登录Redis数据库

CODE
redis-cli -h 192.168.1.5 -p 6379

编译安装Redis的php模块

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

验证生成的Redis模块

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

将生成的redis模块与php整合

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

重启php-fpm

CODE
systemctl restart php-fpm

编写php测试页面

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

访问172.16.1.12/index.php,验证是否成功

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

CODE
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页面

CODE
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缓存调取