关于redis:Redis集群

3次阅读

共计 2257 个字符,预计需要花费 6 分钟才能阅读完成。

实现 Redis 集群

为什么须要搭建集群

rediis 分片特点:
1. 能够实现 Redis 内存数据的扩容。
2.redis 分片自身没有高可用成果,如果宕机将间接影响用户的应用。
redis 哨兵特点:
1.redis 哨兵能够实现 redis 节点的高可用,然而哨兵自身没有实现高可用机制
2.redis 哨兵有主从的构造,实现了内存数据的备份,然而没有实现内存扩容的成果。
降级:
须要 redis 内容扩大,同时须要 redis 高可用性,所以应该应用 Redis 集群。

Redis 集群 Hash 槽的简述

Redis 集群有 16384 个哈希槽, 每个 key 通过 CRC16 校验后对 16384 取模来决定搁置哪个槽. 集群的每个节点负责一部分 hash 槽。这种构造很容易增加或者删除节点,并且无论是增加删除或者批改某一个节点,都不会造成集群不可用的状态。
应用哈希槽的益处就在于能够不便的增加或移除节点。
当须要减少节点时,只须要把其余节点的某些哈希槽挪到新节点就能够了;
当须要移除节点时,只须要把移除节点上的哈希槽挪到其余节点就行了;
在这一点上,咱们当前新增或移除节点的时候不必先停掉所有的 redis 服务。

对于 Redis 集群搭建问题

1. 敞开所有的 redis 服务器
sh stop.sh
2. 删除多余的文件

3. 重启 redis 服务器,执行挂载命令

redis-cli --cluster create --cluster-replicas 1 192.168.126.129:7000 192.168.126.129:7001 192.168.126.129:7002 192.168.126.129:7003 192.168.126.129:7004 192.168.126.129:7005

Redis 入门案例

@Test
    public void testCluster(){Set<HostAndPort> nodes = new HashSet<>();
        nodes.add(new HostAndPort("192.168.126.129", 7000));
        nodes.add(new HostAndPort("192.168.126.129", 7001));
        nodes.add(new HostAndPort("192.168.126.129", 7002));
        nodes.add(new HostAndPort("192.168.126.129", 7003));
        nodes.add(new HostAndPort("192.168.126.129", 7004));
        nodes.add(new HostAndPort("192.168.126.129", 7005));
        JedisCluster jedisCluster = new JedisCluster(nodes);
        jedisCluster.set("cluster", "集群的测试!!!!");
        System.out.println(jedisCluster.get("cluster"));

    }

对于 Redis 中的脑裂景象

阐明:当集群进行选举时,如果间断 3 次都呈现了平票的后果,则可能呈现脑裂的景象。
呈现脑裂景象的概率为 1 /8=12.5%
预防:减少主节点的数量能够无效的升高脑裂景象的产生。
问题 1.Redis 集群中最多能存储 16384 个数据?
谬误的,分区只负责数据的划分,数据的存储由内存决定。
问题 2:Redis 集群中最多由多少台主机?~~~~
16384 台主机。一台主机占用一个槽道。

SpringBoot 整合 Redis 集群

编辑 pro 配置文件

# 配置 redis 单台服务器
redis.host=192.168.126.129
redis.port=6379

# 配置 redis 分片机制
redis.nodes=192.168.126.129:6379,192.168.126.129:6380,192.168.126.129:6381

# 配置哨兵节点
redis.sentinel=192.168.126.129:26379

# 配置 redis 集群
redis.clusters=192.168.126.129:7000,192.168.126.129:7001,192.168.126.129:7002,192.168.126.129:7003,192.168.126.129:7004,192.168.126.129:7005

编辑 RedisConfig 配置类

@Configuration
@PropertySource("classpath:/properties/redis.properties")
public class JedisConfig {@Value("${redis.clusters}")
    private String clusters;

    @Bean
    public JedisCluster jedisCluster(){Set<HostAndPort> nodes = new HashSet<>();
        String[] nodesArray = clusters.split(",");
        for (String node : nodesArray){String host = node.split(":")[0];
            int port = Integer.parseInt(node.split(":")[1]);
            HostAndPort hostAndPort = new HostAndPort(host,port);
            nodes.add(hostAndPort);
        }
        return new JedisCluster(nodes);
    }
  }

编辑 CacheAOP

正文完
 0