当前位置: 代码迷 >> 综合 >> Redis 主从复制、哨兵、集群模式
  详细解决方案

Redis 主从复制、哨兵、集群模式

热度:81   发布时间:2023-10-31 20:10:51.0

Redis 主从复制、哨兵、集群模式

单节点模式

SpringBoot整合
@Bean(name = "singleClient")
public RedissonClient singleRedissonClient() {
    try {
    Config config = new Config();config.useSingleServer().setAddress("redis://" + redisProperties.getUrl() + ":" + redisProperties.getPort()).setDatabase(1);// 设置序列化方式Codec codec = new JsonJacksonCodec();config.setCodec(codec);RedissonClient redissonClient = Redisson.create(config);redissonClient.getBucket("one").set("one");logger.info("==========> singleRedissonClient()配置完成!");return redissonClient;} catch (Exception e) {
    logger.info("==========> singleRedissonClient() 出错:" + e.getMessage());return null;}
}

主从复制

配置方式

主节点配置不变,从节点配置信息加上slaveof 127.0.0.1 9000服务器地址和端口。

特点
  • 一个master可以有多个slave。
  • slave之间也可以互相同步。简单点说就是备份数据库,防止了数据的丢失等。
  • 可以用于读写分离和恢复丢失的数据。
  • 需要手动去配置主从节点,加入主节点挂了,需要重新定义主节点。
SpringBoot整合
/*** 主从模式*/
@Bean(name = "masterSlaveClient")
@Primary
public RedissonClient masterSlaveClient() {
    try {
    Config config = new Config();config.useMasterSlaveServers().setMasterAddress("redis://127.0.0.1:6379").addSlaveAddress("redis://127.0.0.1:6380");RedissonClient redissonClient = Redisson.create(config);redissonClient.getBucket("masterSlaveClient").set("masterSlaveClient");logger.info("==========> masterSlaveClient()配置完成!");return redissonClient;} catch (Exception e) {
    logger.info("==========> masterSlaveClient() 出错:" + e.getMessage());return null;}
}

哨兵模式

哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是**哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。**简单来说,就是替代了人工手动方式切换主节点的操作。

哨兵的作用
  • 通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。

  • 当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。

/*** 哨兵模式*/
@Bean(name = "sentryClient")
public RedissonClient sentryClient(){
    try{
    Config config = new Config();// 需要启动/redis-sentinelconfig.useSentinelServers().setMasterName("mymaster").addSentinelAddress("redis://127.0.0.1:6379").addSentinelAddress("redis://127.0.0.1:6380");RedissonClient redissonClient = Redisson.create(config);redissonClient.getBucket("sentryClient").set("sentryClient");logger.info("==========> sentryClient()配置完成!");return redissonClient;}catch (Exception e){
    logger.info("==========> sentryClient() 出错:" + e.getMessage());}return null;
}

集群模式

需要开启Redis的集群模式,不然会报错。采用集群,就是分布式存储。即每台redis存储不同的内容。 集群至少需要3主3从,且每个实例使用不同的配置文件,主从不用配置,集群会自己选。通过集群模式提供多个master主节点,每个节点都可以读写,节点之间可以互相通信;整个集群无中心节点。

集群模式特点
  • 自动将数据进行分片,每个 master 上放一部分数据。
  • 提供内置的高可用支持,部分 master 不可用时,还是可以继续工作的。
/*** 集群模式*/
@Bean(name = "clustersClient")
public RedissonClient  clustersClient(){
    try{
    Config config = new Config();config.useClusterServers().setScanInterval(2000).addNodeAddress("redis://127.0.0.1:6379").addNodeAddress("redis://127.0.0.1:6382")// ..// ..// ...addNodeAddress("redis://127.0.0.1:6381");RedissonClient redissonClient = Redisson.create(config);redissonClient.getBucket("clustersClient").set("clustersClient");logger.info("==========> clustersClient()配置完成!");return redissonClient;}catch (Exception e){
    logger.info("==========> clustersClient() 出错:" + e.getMessage());}return null;
}