reids事务

redis中

读操作是读从机

写的操作是针对于主机(一主多从)

假设主机挂了,备机还在工作,此时可以手动从备机中选一台让它作为主机!

哨兵模式:主机一旦挂掉,哨兵模式会自动从从机中选择一个作为主机,这种方法的可用性就很高了。

搭建一主二从的步骤:首先切换目录到/usr/local/bin 然后从/opt/redis-5.0.0下复制三个配置文件到/usr/local/bin,分别给三个机器使用。

分别对三个配置文件进行如下的修改

tips:

vim下 /+内容 可以快速匹配搜索,n表示下一个 shift+n表示上一个。

ctrl shift v 或者是鼠标右键都是粘贴

设置任何机器都可以访问

 

关闭保护模式

 

指定端口号

开启线程守护

 进程文件

分别启动三个进程 

查看启动的进程

ps是显示当前状态处于running的进程,grep表示在这些里搜索,而ps aux是显示所有进程和其状态。

ps aux | grep redis

查到redis的进程

kill -s 6379 pid

杀死redis进程

分别查看三个进程是否正常运行

杀死所有进程 

开三个窗口分别进入/usr/local/bin目录 

把三个都启动起来

进入客户端并查看信息

master 三个主机 0表示没有从机

配置从机:将2、3都设置为从机

分别查看信息,可以看到只有6379是主机master,另外两个是从slave,state=online表示联机状态 ,从机的state=up表示在上面

在主机上加数据从机都可以看到

模拟第二台从机损坏

 继续在主机上存数据

可以看到好的从机依然可以拿到数据

重新开启坏掉的从机

坏掉的数据没有保存到从机

再次跟随主机,会发现数据回来了,其实是从主机复制过来的。

模拟主机挂掉

 从机的status变成down

重新启动主机,发现从机会自动连上来

模拟主机损坏得到修复后再存储数据

 从机能正常拿到数据

测试连接

测试读写操作:

package com.lay.kangan.utils;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.util.Random;

/**
 * @author Dragon code!
 * @create 2022-04-01 10:33
 */
public class JedisUtil {
    public static JedisPool pool = null;

    //用于写的redis
    public static Jedis getWriteJedis(){
        Jedis jedis = getPool("192.168.xxx.xxx",6379).getResource();
        return  jedis;
    }
    //用于读的redis
    public static Jedis getReadJedis(){
        //轮询算法,实现负载均衡
        Random random = new Random();
        //随机0、1
        int num = random.nextInt(2);
        System.out.println(num);
        int port = Integer.valueOf("638" +num);
        Jedis jedis = getPool("192.168.xxx.xxx",port).getResource();
        return  jedis;
    }

    public static JedisPool getPool(String host,int port) {
        //单例模式
        synchronized (JedisPool.class) {
            if (pool == null) {
                JedisPoolConfig poolConfig = new JedisPoolConfig();
                poolConfig.setMaxTotal(15);
                //最小空闲数量
                poolConfig.setMinIdle(3);
                poolConfig.setMaxIdle(10);
                pool = new JedisPool(poolConfig,host,port);
            }
        }
        return pool;
    }
    //把池中获取的连接对象归还
    public static void releasePool(JedisPool pool, Jedis jedis){
        pool.returnBrokenResource(jedis);

    }

    public static void main(String[] args) {
        //测试写的redis
        Jedis wj = getWriteJedis();
        wj.set("k4","v4");
        //测试从机读的redis
        Jedis readJedis = getReadJedis();
        System.out.println(readJedis.get("k4"));
    }
}

薪火相传:

让从机跟随从机。

假设有一份数据保存到主机,此时主机只需要把数据给直接连接的从机,从机的从机由从机传数据。

反客为主:

主机挂掉,将从机6380设置为主机 

redis从属服务器执行命令 SLAVEOF NO ONE 将使得这个从属服务器关闭复制功能,并从从属服务器转变回主服务器,原来同步所得的数据集不会被丢弃。

将第二台从机挂到新上位的主机上

坏掉的主机好了后直接将它作为从机跟随6380主机,此时6380是主机,6379和6381都是从机

哨兵模式:反客为主的自动版!(最实用)

采用哨兵后整个主从切换直接自动化。

哨兵每隔一段时间发ping判断是否死了(心跳),不会一次未响应就判断为死,如果发现真的主机死了后,进行选举操作。

所有的从机来投票,不能投自己,谁得票多,谁就是主机。

最后的1表示票数

配置完成后启动哨兵进行监控: 

模拟79主机坏掉,此时哨兵起反应通过选举,结果为81被选为主机

79主机恢复后直接变为从机跟随81

注意达到高可用至少两个哨兵,可以解决哨兵的单点故障

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值