前几天把redis又重新梳理了一次。主要还是对redis的查缺补漏以及更深入的了解。
这里算是一篇总结笔记叭,先从linux服务器redis主从复制,哨兵集群搭建开始。到后边springboot集成redis。
我们一步一步来。
一:redis搭建主从复制集群。
1:只需要配置从库,不需要配置主库
127.0.0.1:6379> info replication # 查看当前库信息
# Replication
role:master # 角色
connected_slaves:0 # 没有从机
master_failover_state:no-failover
master_replid:3cbed6e6f0629848071e0929f6d3f561d7498360
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:54
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
2:配置redis.conf
我没有多台服务器,因此我在一台服务器上边搭建redis集群,一主二从。三个redis。
首先我们来准备三个redis.conf配置文件:redis79.conf/redis80.conf/redis81.conf
我这里根据端口号命名。修改redis79.conf
port 6379
daemonize yes
pidfile /var/run/redis_6379.pid
logfile “6379.log”
dbfilename dump6379.rdb
#如果你是用的是aof备份机制,还需要修改:
appendfilename "appendonly6379.aof"
3:配置从机
Redis默认是主机,因此,不需要配置主机,只需要配置从机即可。
配置从机很简单,让他知道那个是主机就可以了,我这里将79认定为主机,那么80/81两个就是从机。这个配置需要到80/81上边去操作:
配置主从,一般都在配置文件中配置,这样才是永久的。
修改从机中的redis.conf:
replicaof <masterip> <masterport> # 配置主机
masterauth <master-password> # 配置主机密码
依次修改上方的配置文件。
修改成功之后,依次使用配置文件启动redis-server
redis-server rconfig/redis79.conf
redis-server rconfig/redis80.conf
redis-server rconfig/redis81.conf
从机配置完成之后,我们再去主机下边看一下主机的信息:
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2 # 两个从机
slave0:ip=127.0.0.1,port=6380,state=online,offset=210,lag=0 # 从机1信息
slave1:ip=127.0.0.1,port=6381,state=online,offset=210,lag=1 # 从机2信息
master_failover_state:no-failover
master_replid:29d7972ef844579fb6a727bbbce017e58e35c45e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:224
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:224
这里注意,每次修改完配置之后,重启redis需要将持久化文件(.rdb/.aof)文件删除,否则可能会有问题。
二:配置哨兵集群
创建哨兵模式配置文件sentinel.conf:
# 绑定ip
bind 0.0.0.0
# 监听端口
port 26379
# 哨兵监听的ip和端口,这里监听ip要和springboot中配置的redis的ip一致
sentinel announce-ip "127.0.0.1"
# 后面的2 表示有2个哨兵认为主库挂了就是客观下线
# 就会开始选举
# 5000 表示每5秒钟检测一次主库是否挂掉,这里监听ip要和springboot中配置的redis的ip一致
sentinel monitor mymaster 127.0.0.1 6379 1
sentinel failover-timeout mymaster 5000
# linux中 解除redis保护 允许外部连接
protected-mode no
# 后台访问
daemonize yes
更多sentienl配置请移步《Redis重制(十九)哨兵模式》
这里需要注意一下:
sentinel monitor mymaster 127.0.0.1 6379 1
中的mymaster,这个是redis主节点的名称,叫什么都行,这个要在后边的springboot配置中使用。
哨兵要保证高可用,也要配置集群,需要多个配置文件,监听不同端口,启动多个哨兵。
redis-sentinel rconfig/sentinel79.conf
redis-sentinel rconfig/sentinel80.conf
redis-sentinel rconfig/sentinel81.conf
这里需要注意,先启动redis集群,再启动哨兵集群。
三:springboot集成redis
1:配置application.yml配置文件
spring:
#redis
redis:
# 超时时间
timeout: 10000
# 使用的数据库索引,默认是0
database: 0
# 密码
# password: 123456
###################以下为肌ed1s哨兵增加的配置###########################
sentinel:
master: mymaster # 哨兵主节点名称,自定义这就是上边配置主节点的时候的名字
nodes: 1.1.1.1:26379, 1.1.1.1:26380, 1.1.1.1:26381
##################以下为]ettuce连接池增加的配置###########################
lettuce:
pool:
max-active: 100 #连接池最大连接数(使用负值表示没有限制)
max-idle: 100 #连接池中的最大空闲连接
min-idle: 50 #连接池中的最小空闲连接
max-wait: -1 #连接池最大阻塞等待时间(使用负值表示没有限制)
注意上边配置中的spring.redis.sentinel.master:mymaster
这其中的mymaster就是哨兵模式中,主节点的名称。
2:添加RedisConfig.java配置
package com.modules.config;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisSentinelConfiguration;
import org.springframework.data.redis.core.*;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.data.redis.support.collections.RedisProperties;
@Configuration
@EnableCaching //开启注解
@ConditionalOnClass() // 替换springboot原有配置
public class RedisConfig extends CachingConfigurerSupport {
/**
* retemplate相关配置(这是一个固定模板,工作中可以直接用)
*/
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {