Redis1

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缓存服务器效果
```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值