redis服务器
> 学习环境:
>
> ```
> redis64:
> ->192.168.88.64
> ```
>
> 集群环境
>
> ```
> host51:
> ->192.168.88.51
> host52:
> ->192.168.88.52
> host53:
> ->192.168.88.53
> host54:
> ->192.168.88.54
> host55:
> ->192.168.88.55
> host56:
> ->192.168.88.56
> ```
>
> 缓存环境:
>
> ```
> nginx57:
> ->192.168.88.57
> ```
#### 一、搭建redis服务器
安装redis
```shell
yum -y install redis
systemctl enable redis --now
# 验证端口
ss -antlup | grep 6379
# 配置文件 /etc/redis.conf
+69 定义监听地址
+92 定义服务端口
+158 定义进程pid文件
+171 定义日志文件
+186 定义库,数字表示库的数量默认有16个库,编号0~(num-1)
+507 连接redis密码
修改配置文件重启生效
# 登录redis认证
redis-cli -h 192.168.88.64 -p 6364 –a tarena #认证方式1
auth 密码 #认证方式2,登录命令只输入ip和端口,不输入密码
```
> redis-cli -h 192.168.88.64 -p 6364 -a tarena info 2> /dev/null | grep memory_lua: | awk -F: '{print $2}'
#### 二、创建redis集群
> 不同于mysql,redis的从节点只读,只做备份,不做
>
> 任意一台redis服务器上都可以执行创建集群的命令
> redis集群采用投票模式需要至少3台服务器,一主一备需要至少6台服务器
集群环境准备
```shell
vm clone host51 host52 host53 host54 host55 host56
for i in 5{1..6}
do
vm setip host$i 192.168.88.$i
ssh-copy-id root@192.168.88.$i
ssh root@192.168.88.$i "hostnamectl set-hostname host$i"
done
# 修改单一网络地址
+69 任意网络地址:0.0.0.0
+826 开始配置redis集群
+838 启用集群模式:cluster-enabled yes
+846 启用集群配置文件,目录:/var/lib/redis
+852 连接超时时间
# 安装启动redis
- hosts: all
tasks:
- yum:
name: redis
- hosts: host51
tasks:
- shell: |
for i in 5{2..6}
do
scp /etc/redis.conf root@192.168.88.$i:/etc
done
- hosts: all
tasks:
- service:
name: redis
state: started
enabled: yes
#验证,端口16379负责集群内部通信业务
ansible all -m shell -a "ss -antlup | grep redis"
ansible all -m shell -a "redis-cli info cluster"
```
搭建集群
```shell
# 搭建集群
redis-cli --cluster create --cluster-replicas 1 \
192.168.88.51:6379 192.168.88.52:6379 \
192.168.88.53:6379 192.168.88.54:6379 \
192.168.88.55:6379 192.168.88.56:6379
# 重设集群,用于创建错误
for i in 5{1..6}
do
redis-cli cluster reset
done
# 查看集群信息
redis-cli --cluster info 192.168.88.51:6379 #简略
redis-cli --cluster check 192.168.88.51:6379 #详细
```
测试——数据分布式存储
```shell
redis-cli -c -h 192.168.88.55 -p 6379
redis-cli --cluster call 192.168.88.55:6379 keys \*
# 在集群中数据库不存在分库的概念,所有的数据都在0库
```
测试——高可用
```
# 手动停止一台master服务器,模拟宕机
slave会自动替补master,并继承master的hash槽
# 启动master服务器,模拟修复
原有的master在下线的时间段数据落后于slave
所以原有的master和slave会调换地位,master做slave的备
```
#### 三、测试redis缓存
> 配置nginx服务器
> yum安装nginx、mysql、php、php-fpm、php-mysqlnd
>
> github源码php连接redis安装包
> 读README下载php-devel,源码包是c语言需要gcc、make
> yum安装gcc、make、php-devel
> ./configure加模块:--with-php-config=/usr/bin/php-config #php配置信息文件
配置php识别redis
```shell
vim +737 /etc/php.ini
extension_dir = "/usr/lib64/php/modules" #737
extension = "redis.so" #739
# 重启服务生效
systemctl restart php-fpm.service
# 验证模块存在
php -m | grep redis
```
创建数据脚本
```php
# vim /usr/local/nginx/html/set.php
<?php
$redis_list = ['192.168.88.51:6379','192.168.88.52:6379','192.168.88.53:6379','192.168.88.54:6379','192.168.88.55:6379','192.168.88.56:6379'];
$client = new RedisCluster(NUll,$redis_list);
$client->set("i","tarenaA ");
$client->set("j","tarenaB ");
$client->set("k","tarenaC ");
echo "save ok\n";
?>
# vim /usr/local/nginx/html/get.php
<?php
$redis_list = ['192.168.88.51:6379','192.168.88.52:6379','192.168.88.53:6379','192.168.88.54:6379','192.168.88.55:6379','192.168.88.56:6379']; //定义redis服务器列表
$client = new RedisCluster(NUll,$redis_list); //定义连接redis服务命令
echo $client->get("i"); //获取变量i 的数据
echo $client->get("j"); //获取变量j 的数据
echo $client->get("k"); //获取变量k 的数据
?>
```
-------------------------------------php能操作到redis------------------------------------
测试代码
```php
<?PHP
$redis_cluster = [
'192.168.88.51:6379',
'192.168.88.52:6379',
'192.168.88.53:6379',
'192.168.88.54:6379',
'192.168.88.55:6379',
'192.168.88.56:6379'
];
$redis = new RedisCluster(NULL, $redis_cluster);
$time = $redis->get('time');
if(empty($time)){
echo "Query From \033[31mMySQL\033[0m:\t";
$mysqli = new mysqli('127.0.0.1','root','','mysql');
if (mysqli_connect_errno()){
die('Unable to connect!'). mysqli_connect_error();
}
$sql = "SELECT time(now())";
$result = $mysqli->query($sql);
$rs = $result->fetch_array();
$r=$rs[0];
$redis->set("time",$r);
$redis->expire("time",5);
echo "$r";
echo "\n";
}else{
echo "Query From \033[32mRedis\033[0m:\t";
echo $time;
echo "\n";
}
?>
# 将该文件转到nginx下的html中
curl访问网页验证redis缓存服务器效果
```