目的:搭建主从复制模式的 redis 集群。
步骤:一、准备至少 6 个 redis 运行实例;
二、使用 redis 自有工具创建集群;
三、springboot 项目配置 redis 连接。
一、准备 redis 运行实例。
即安装并运行 redis 实例。如果有多台机器,建议同时进行下面的步骤,并保持一致的安装和运行目录。
1. 官网下载最新 tar.gz 包。参考链接:http://download.redis.io/releases/redis-5.0.5.tar.gz
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
2. 解压到准备好的目录,建议选用默认路径
tar -zxvf redis-5.0.5.tar.gz /usr/local/redis
3. 进入解压好的 redis 文件夹,执行 make
cd /usr/local/redis
make && make install
执行完毕后,会在 /usr/local/bin 目录下看到一些文件
ls /usr/local/bin
注意其中的 redis-cli 和 redis-server
4. 创建集群目录,复制必要的运行文件
cd /usr/local
mkdir redis-cluster && cd redis-cluster
mkdir 7000 7001 # 此处以端口号为文件目录
cp /usr/local/bin/redis-* ./7000
cp /usr/local/bin/redis-* ./7001
5. 创建 redis 配置文件
vim 7000/redis.conf
编辑如下内容
bind 本机ip4地址 127.0.0.1 # 绑定本机地址及回环地址,便于外部访问和本机访问
port 7000
cluster-enabled yes # 激活集群
daemonize yes # 后台执行
cluster-config-file nodes.conf # 节点配置,如果不存在,会自动创建
cluster-node-timeout 5000
appendonly yes
复制一份到另一个目录
cp 7000/redis.conf 7001/redis.conf
vim 7001/redis.conf
修改端口
port 7001
6. 运行实例
cd 7000
redis-server redis.conf
cd ../7001
redis-server redis.conf
7. 测试实例是否开启
ps aux | grep redis # 查看 redis 进程
redis-cli -h 127.0.0.1 -p 7000 # 登录 redis 客户端
二、使用 redis 自有工具创建集群
如果已经有了 6 个以上的 redis 运行实例,那么可以开始创建集群了。
1. 使用 redis-cli 工具创建集群,注意所有节点已开启且信息准确无误
redis-cli --cluster create 1.1.1.1:7000 1.1.1.1:7001 …… --cluster-replicas 1
如果各个节点通信正常,将会显示一份 master 和 slave 的配置清单,查看无误后键入 yes 即可。
2. 测试集群。登录 redis 客户端,设置测试缓存。
redis-cli -h 127.0.0.1 -p 7000
127.0.0.1:7000> set test sss
如果有节点复制消息,说明集群正常。
三、springboot 项目配置 redis 连接
1. 加入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2. yml 资源文件配置 (redis 线程池部分请自行斟酌)
spring:
redis:
jedis:
pool:
max-idle: 50
min-idle: 10
max-active: 2000
max-wait: 10s
timeout: 5s
cluster:
nodes:
- 1.1.1.1:7000
- 1.1.1.1:7001
……
3. 配置 redis 模板。此处设置 key 为 String 类型,方便查看key值。
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
// 设置key的序列化规则
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
4. 注入使用。
@Autowired
RedisTemplate<String, Object> redisTemplate;
// 方法内使用
redisTemplate.opsForValue().set("key", object, long, timeUnit); // 键,值,时间数值,时间单位
redisTemplate.opsForValue().get("key");
更多使用场景请参考 springboot 关于 redis 整合部分的文档。