乐趣区

关于redis:SpringBoot整合Redis集群

Redis 集群

为什么须要搭建集群:

通常,为了进步网站响应速度,总是把热点数据保留在内存中而不是间接从后端数据库中读取。Redis 是一个很好的 Cache 工具。大型网站利用,热点数据量往往微小,几十 G 上百 G 是很失常的事儿。因为内存大小的限度,应用一台 Redis 实例显然无奈满足需要,这时就须要应用多台 Redis 作为缓存数据库。然而如何保证数据存储的一致性呢, 这时就须要搭建 redis 集群. 采纳正当的机制, 保障用户的失常的拜访需要.
采纳 redis 集群, 能够保证数据扩散存储, 同时保证数据存储的一致性. 并且在外部实现高可用的机制. 实现了服务故障的主动迁徙.

集群搭建打算测试

主从划分:3 台主机 3 台从机共 6 台 端口划分 7000-7005

集群搭建

1. 创立集群文件夹:Mkdir cluster
2. 在文件夹中创立多个文件:mkdir 7000 7001 7002 7003 7004 7005

复制配置文件

将 redis 根目录中的 redis.conf 文件复制到 cluster/7000/ 并以原名保留
cp redis.conf cluster/7000/

编辑配置文件

1. 正文本地绑定 IP 地址

2. 敞开保护模式

3. 批改端口号

4. 启动后盾启动

5. 批改 pid 文件

6. 批改长久化文件门路

7. 设定内存优化策略

8. 敞开 AOF 模式

9. 开启集群配置

10. 开启集群配置文件

11. 批改集群超时工夫

复制批改后的配置文件

将 7000 文件夹下的 redis.conf 文件别离复制到 7001-7005 中

批量批改

别离将 7001-7005 文件中的 7000 改为对应的端口号的名称,
批改时留神方向键的应用

通过脚本编辑启动 / 敞开指令
1. 创立启动脚本 vim start.sh

2. 编辑敞开的脚本 vim shutdown.sh

3. 启动 redis 节点:sh start.sh
4. 查看 redis 节点启动是否失常:ps -ef | grep redis

创立 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 集群高可用测试

1. 敞开 redis 主机. 查看是否主动实现故障迁徙.
2. 再次启动敞开的主机. 查看是否可能实现主动的挂载.
个别状况下 可能实现主从挂载
个别情况:宕机后的节点重启,可能挂载到其余主节点中(7001-7002)正确的.

Redis 集群原理

Reids 集群高可用推选原理


原理解析:
Redis 的所有节点都会保留以后 redis 集群中的全副主从状态信息. 并且每个节点都可能互相通信. 当一个节点产生宕机景象. 则集群中的其余节点通过 PING-PONG 检测机制查看 Redis 节点是否宕机. 当有半数以上的节点认为宕机. 则认为主节点宕机. 同时由 Redis 残余的主节点 进入选举机制. 投票选举链接宕机的主节点的从机. 实现故障迁徙.

Redis 进群宕机条件

特点:集群中如果主机宕机,那么从机能够持续提供服务,当主机中没有从机时,则向其它主机借用多余的从机. 持续提供服务. 如果主机宕机时没有从机可用,则集群解体.

Redis hash 槽贮存数据原理

RedisCluster 采纳此分区,所有的键依据哈希函数(CRC16[key]%16384)映射到 0 -16383 槽内,共 16384 个槽位,每个节点保护局部槽及槽所映射的键值数据. 依据主节点的个数,平衡划分区间.
算法:哈希函数:Hash()=CRC16[key]%16384

当向 redis 集群中插入数据时,首先将 key 进行计算. 之后将计算结果匹配到具体的某一个槽的区间内,之后再将数据 set 到治理该槽的节点中.

在 IDEA 代码中引入

1. 编辑 pro 配置文件

配置 redis 集群

redis.nodes=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
2. 编辑配置类
@Configuration // 标识我是一个配置类 个别与 @Bean 注解联用
@PropertySource(“classpath:/properties/redis.properties”)
public class RedisConfig {

@Value("${redis.nodes}")
private String nodes;   //node,node,node

@Bean
public JedisCluster jedisCluster(){Set<HostAndPort> nodesSet = new HashSet<>();
    String[] nodeArray = nodes.split(",");
    for (String node : nodeArray){  //host:port
        String host = node.split(":")[0];
        int port = Integer.parseInt(node.split(":")[1]);
        HostAndPort hostAndPort = new HostAndPort(host, port);
        nodesSet.add(hostAndPort);
    }
    JedisPoolConfig config = new JedisPoolConfig();
    config.setMaxTotal(1000);
    config.setMaxIdle(60);
    config.setMinIdle(20);
    return new JedisCluster(nodesSet,config);
}
}

3. 编辑 CacheAOP

退出移动版