redis主从模式实践与总结

什么是主从模式?

主从模式我理解为读写分离, 就是把原来的 Redis 库复制一份到另一个服务器的 Redis , 原来的 Redis 只提供写入功能, 称为主(master), 复制出来的 Redis 只提供读功能, 成为(slave).
可以是一主一从, 也可以是一主多从. 通过这种读写分离的方式来实现降低 Redis 的访问压力, 这就是主从模式的一个大致概念.

配置

准备2个服务器 192.168.120.1作为master 192.168.120.2作为slave

master不变 slave服务器redis.conf 文件的末尾添加一行 所属的 master 即可.

slaveof 192.168.120.1 6379 #为master 的redis 的ip 和端口

然后重启搭建好了 此时可以在192.168.120.1上set 192.168.120.2上get

springboot处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
spring:
redis:
host: 192.168.120.1 # Redis 主节点的 IP 地址
port: 6379 # Redis 主节点的端口号
password: 123123 # 访问 Redis 实例的密码
lettuce:
pool:
max-active: 8 # 连接池最大活跃连接数
max-idle: 8 # 连接池最大空闲连接数
min-idle: 0 # 连接池最小空闲连接数
sentinel:
master: mymaster
nodes:
- host: 192.168.120.2
port: 6379
- host: 192.168.120.3
port: 6379
  1. 在执行读操作时, 需要使用名为 slaveRedisTemplate 的 RedisTemplate 对象, 该 RedisTemplate 对象的配置应该与默认的 RedisTemplate 对象(用于写操作)有所不同
  2. 在连接 Redis 实例时需要指定读取数据的从节点. 这里使用了 connectionFactory 来创建 RedisTemplate 对象, 并将名称设置为 slaveRedisTemplate.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

@Configuration
public class RedisConfig {

@Autowired
private RedisConnectionFactory connectionFactory;

@Bean(name = "slaveRedisTemplate")
public RedisTemplate<Object, Object> slaveRedisTemplate() {
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
template.afterPropertiesSet();
return template;
}

}


@Service
public class RedisService {

@Autowired
private RedisTemplate<Object, Object> redisTemplate;

@Autowired
@Qualifier("slaveRedisTemplate")
private RedisTemplate<Object, Object> slaveRedisTemplate;

public void set(String key, String value) {
redisTemplate.opsForValue().set(key, value);
}

public String get(String key) {
return (String) slaveRedisTemplate.opsForValue().get(key);
}
}

@Autowired@Qualifier("slaveRedisTemplate") 用于注入名为 slaveRedisTemplate 的 RedisTemplate 对象, 并通过该对象来执行读操作.
在执行写操作时, 则需要使用默认的 RedisTemplate 对象(即 redisTemplate).

需要注意的是, 在实际应用中, 对于一些需要保证强制一致性的写操作, 仍然需要通过主节点进行操作.