Redis介绍

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

特点

支持多种数据类型

支持分布式存储

功能丰富

常用命令

select:切换数据库,redis有16个数据库(0-15)

set:创建键值对,如果键值对存在,则会覆盖

get:查看指定键值对

mset:批量创建键值对

append:在对应的键值对的内容进行追加

keys *:查看数据库中所有键

dbsize:统计数据库中键的个数

move:对键进行迁移

del:删除指定的键值对,可以是多个

flushall:清空所有的数据

Redis缓存搭建

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

实验环境

一台lnmp环境的linux即可

实验目的

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

实验步骤

在lnmp的基础上

调整php-fpm配置文件

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

调整nginx配置文件

vim /usr/local/nginx/conf/nginx.conf
        location ~ \.php$ {
            root           html;
            fastcgi_pass   192.168.1.5:9000;    # 改为本机地址
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi.conf;
        }

systemctl restart nginx
# 重启nginx

安装Redis数据库

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

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

启动redis服务

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

登录Redis数据库的方法

redis-cli -h 192.168.1.5 -p 6379

编译安装Redis的php模块

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

验证生成的Redis模块

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

将生成的redis模块与php整合

vim /usr/local/php5/php.ini 
extension = redis.so

重启php-fpm

systemctl restart php-fpm

编写php页面,验证redis的php模块是否成功加入了php中

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

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

redis.so

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

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

vim /usr/local/nginx/html/index.php 
<?php
$redis=new Redis;
$redis->connect("192.168.1.5",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("192.168.1.5","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>";
}
?>

重新192.168.1.5/index.php访问进行验证

刷新两次,即可看到下图,刷新两次是因为,第一次直接拿去数据库的数据,第二次则时拿去redis缓存中的数据

image-20200210152346900

Redis集群

Redis集群最少要有三个节点,三个节点每个都需要从

每个节点之间都是平等的,每个上面都有连接,从节点不工作,只有主节点才会存储数据

通过hash(CRC16算法)槽点进行分配,一共有16384个槽点,平均分配到每个节点上,只有主节点上面有槽点,有槽点才能存储数据,备份节点没有槽点,当主机点宕机,槽点会转移到备份节点,由备份节点来工作,提升为主节点

数据通过crc16算法进行分配,算出来在哪个槽点范围则进入那台节点

集群搭建

实验环境

一台LNMP的linux服务器,生产环境至少3台服务器

实验目的

搭建Redis集群

实验步骤

创建集群配置文件目录

[root@localhost ~]# cd /usr/local/
[root@localhost local]# mkdir cluster
[root@localhost local]# cd cluster/
[root@localhost cluster]# mkdir {7000..7005}
[root@localhost cluster]# cp /usr/local/redis/redis.conf 7000/
vim 7000/redis.conf
daemonize yes  # 允许后台运行
port 7000     # 节点端口
appendonly yes    # 持久化开启
appendfilename "appendonly-7000.aof"   # 快照文件名
cluster-enabled yes    # 开启集群
cluster-config-file nodes-7000.conf   # 节点配置文件名
cluster-node-timeout 5000    # 集群节点超时时间
[root@localhost cluster]# cp 7000/redis.conf 7001
[root@localhost cluster]# cp 7000/redis.conf 7002
[root@localhost cluster]# cp 7000/redis.conf 7003
[root@localhost cluster]# cp 7000/redis.conf 7004
[root@localhost cluster]# cp 7000/redis.conf 7005
[root@localhost ~]# sed -i 's/7000/7001/g' /usr/local/cluster/7001/redis.conf 
[root@localhost ~]# sed -i 's/7000/7002/g' /usr/local/cluster/7002/redis.conf 
[root@localhost ~]# sed -i 's/7000/7003/g' /usr/local/cluster/7003/redis.conf 
[root@localhost ~]# sed -i 's/7000/7004/g' /usr/local/cluster/7004/redis.conf 
[root@localhost ~]# sed -i 's/7000/7005/g' /usr/local/cluster/7005/redis.conf 

启动6个不同端口服务

redis-server /usr/local/cluster/7000/redis.conf 
redis-server /usr/local/cluster/7001/redis.conf 
redis-server /usr/local/cluster/7002/redis.conf 
redis-server /usr/local/cluster/7003/redis.conf 
redis-server /usr/local/cluster/7004/redis.conf 
redis-server /usr/local/cluster/7005/redis.conf

查看服务是否启动成功

netstat -anput | grep redis

安装pem包,用来创建集群

yum -y install ruby   # anzruby,能够使用gem命令
gem install redis-3.3.0.gem

创建集群

cd /usr/local/redis/src
./redis-trib.rb create --replicas 1 192.168.1.5:7000 192.168.1.5:7001 192.168.1.5:7002 192.168.1.5:7003 192.168.1.5:7004 192.168.1.5:7005
create:创建集群 --replicas给主节点指定从节点个数
reshard 槽点重新分配
info 集群信息
add-node:添加节点,默认为主节点
add-node --slave 添加从节点
--master-id:指定主节点
del-node:删除节点,如果是主节点,这里的槽点需要提前转移,然后删除
./redis-trib.rb check 192.168.1.5:7000

添加从节点

# 准备从节点配置文件目录
[root@localhost ~]# mkdir /usr/local/cluster/7006
[root@localhost ~]# cp /usr/local/cluster/7000/redis.conf /usr/local/cluster/7006/
[root@localhost ~]# sed -i "s/7000/7006/g" /usr/local/cluster/7006/redis.conf 
# 启动从节点
[root@localhost ~]# redis-server /usr/local/cluster/7006/redis.conf 
[root@localhost ~]# /usr/local/redis/src/redis-trib.rb check 192.168.1.5:7000
# 粘贴任意一个主的uuid
2172d6d3bfcc487241903193d437ff9dc9a60995
# 创建从节点,并指定一个主节点
/usr/local/redis/src/redis-trib.rb add-node --slave --master-id 2172d6d3bfcc487241903193d437ff9dc9a60995 192.168.1.5:7006 192.168.1.5:7000

添加主节点

# 准备主节点配置文件目录
[root@localhost ~]# mkdir /usr/local/cluster/7007
[root@localhost ~]# cp /usr/local/cluster/7000/redis.conf /usr/local/cluster/7007/
[root@localhost ~]# sed -i "s/7000/7007/g" /usr/local/cluster/7007/redis.conf
# 启动服务
[root@localhost ~]# redis-server /usr/local/cluster/7007/redis.conf
创建主节点
/usr/local/redis/src/redis-trib.rb add-node 192.168.1.5:7007 192.168.1.5:7000

[root@localhost ~]# /usr/local/redis/src/redis-trib.rb check 192.168.1.5:7000
# 因为没有槽点。复制刚添加的端口号的uuid,要进行重新分配槽点
90e63fe3e6c50fe596e761c2b652f5e10d65ff84
[root@localhost ~]# /usr/local/redis/src/redis-trib.rb reshard 192.168.1.5:7000
填写移动槽点  因为四台16384/4=4096
然后,填写uuid,输入all,yes就好了
[root@localhost ~]# /usr/local/redis/src/redis-trib.rb check 192.168.1.5:7000
# 再次查看7007有了槽点

重新分配槽点是移动的每个主节点中的其中一部分

删除从节点

# 删除哪个就复制哪个的uuid,uuid使用check查看
[root@localhost ~]# /usr/local/redis/src/redis-trib.rb del-node 192.168.1.5:7003 f18c73d8dc1e7c679b03e25c5c0ff02dbec4f2e6

查看集群节点信息

[root@localhost ~]# /usr/local/redis/src/redis-trib.rb info 192.168.1.5:7000

评论




正在载入...
PoweredHexo
HostedAliyun
DNSAliyun
ThemeVolantis
UV
PV
BY-NC-SA 4.0