linux配置redis集群
1.创建6个实例,即在自己redis解压后的文件夹 下分别创建创建启动配置类文件夹conf
(注:授权等操作省略)
> cd /你的redis存放目录
> cd /lw/redis
> mkdir conf
> chmod -R 755 conf/
2.新建6个文件 6379、6380、 6381、 6382、 6393、 6394的conf。(你可以将原配置redis.conf拷贝6分然后逐个去修改里面的配置,也可以新建留个空文件夹 redis_6379.conf, redis_6380.conf, …)
>cd conf
>vi redis_6379.conf
#将这些内容复制到你创建的6个 redis_6379.conf, redis_6380.conf, ...文件夹内 **下边的配置一定要注意 修改 里边的配置6379对应6379,6380对应6380等**
#pid启动是生成的
pidfile /var/run/redis_6379.pid
#端口号-每个节点的
port 6379
#rdb备份
dbfilename dump6379.rdb
# 启动节点
cluster-enabled yes
# 节点配置文件-启动后会生成
cluster-config-file nodes-6379.conf
#节点的超时时限
cluster-node-timeout 15000
## 如果不是拷贝了6分redis.conf,,,你可以假如下边一段:include 后边是你的redis原来的redis.conf配置,因为我是拷贝了6份所以不用下边这一行
#include /lw/redis/redis.5.0.5/redis.conf
3.注释掉redis.conf或者是每个配置文件(如果你是拷贝了6份,而不是通过include)都需要做以下修改
#如果你是include就使用 vi redis.conf
>vi redis_6379.conf
#设置protected mode 模式为no 并且注释掉 bind 127.0.0.1 注释掉默认端口 6379 否则节点联通启动命令会报错:
protected mode no
#bind 127.0.0.1
#port 6379
4.逐一启动每个redis
> cd /redis安装目录 src文件夹内 -- 后台启动
> nohup ./redis-server ../conf/redis_6379.conf &
> nohup ./redis-server ../conf/redis_6380.conf &
> nohup ./redis-server ../conf/redis_6381.conf &
> nohup ./redis-server ../conf/redis_6382.conf &
> nohup ./redis-server ../conf/redis_6383.conf &
> nohup ./redis-server ../conf/redis_6384.conf &
> ps -ef | grep redis
#显示如下则所有节点都启动
liuwei@ubuntu:/lw/project/log$ ps -ef | grep redis
liuwei 6612 1 0 Mar23 ? 00:00:09 ./redis-server *:6379 [cluster]
liuwei 6694 6319 0 Mar23 pts/1 00:00:08 ./redis-server *:6381 [cluster]
liuwei 6698 6319 0 Mar23 pts/1 00:00:08 ./redis-server *:6382 [cluster]
liuwei 6702 6319 0 Mar23 pts/1 00:00:08 ./redis-server *:6383 [cluster]
liuwei 6706 6319 0 Mar23 pts/1 00:00:08 ./redis-server *:6384 [cluster]
liuwei 6714 6319 0 Mar23 pts/1 00:00:08 ./redis-server *:6380 [cluster]
liuwei 8479 6319 0 02:03 pts/1 00:00:00 grep --color=auto redis
5.启动redis 集群
#创建集群命令:其中 cluster-replicas 1 代表 一个master后有几个slave,1代表为1个slave节点
> redis-cli --cluster create --cluster-replicas 1 192.175.1.190:6379 192.175.1.190:6380 192.175.1.190:6381 192.175.1.190:6382 192.175.1.190:6383 192.175.1.190:6384
二、springboot集成redis集群模式
1.pom依赖
<!-- Spring Boot Redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2.配置类以及配置文件application.yml
spring:
redis:
mode: cluster
cluster:
nodes:
- 192.175.1.190:6379
- 192.175.1.190:6380
- 192.175.1.190:6381
- 192.175.1.190:6382
- 192.175.1.190:6383
- 192.175.1.190:6384
#password:
timeOut: 6000
#password: 123456
database: 1
lettuce:
pool:
max-active: 8
max-idle: 8
max-wait: 1s
min-idle: 0
# <REDIS_yi单机配置>
# host: localhost
# port: 6379
package com.spring_mybatis.base.config.redis;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.module.paramnames.ParameterNamesModule;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.cache.CacheProperties;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Primary;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.connection.RedisClusterConfiguration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisNode;
import org.springframework.data.redis.connection.RedisSentinelConfiguration;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* 说明: redis配置
*
* @author liuwei
* @since 2023/3/23 22:51
*/
@Component
@EnableCaching
@AutoConfigureBefore(RedisAutoConfiguration.class)
public class RedisConfig {
@Resource
private RedisProperties redisProperties;
@Bean
@Primary
public RedisCacheConfiguration redisCacheConfiguration(CacheProperties cacheProperties) {
CacheProperties.Redis redisProperties = cacheProperties.getRedis();
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
// //指定缓存序列化方式为json
// Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
// ObjectMapper om = new ObjectMapper();
// om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
// om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
// jackson2JsonRedisSerializer.setObjectMapper(om);
// config = config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer(om)));
//下面的这四个配置,如果我们不写在这里的话,将读取不到。默认的配置也会有的,但是我们自己写配置类的话,就需要加上去,
//设置配置文件中的各项配置,如过期时间
if (redisProperties.getTimeToLive() != null) {
config = config.entryTtl(redisProperties.getTimeToLive());
}//key的前缀
if (redisProperties.getKeyPrefix() != null) {
config = config.prefixKeysWith(redisProperties.getKeyPrefix());
}//是否缓存空值
if (!redisProperties.isCacheNullValues()) {
config = config.disableCachingNullValues();
}//是否使用key的前缀
if (!redisProperties.isUseKeyPrefix()) {
config = config.disableKeyPrefix();
}
return config;
}
@Primary
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
// jdk8的一些类序列化
objectMapper.registerModule(new Jdk8Module()).registerModule(new JavaTimeModule()).registerModule(new ParameterNamesModule());
GenericJackson2JsonRedisSerializer json2java = new GenericJackson2JsonRedisSerializer(objectMapper);
RedisTemplate redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(redisConnectionFactory);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(json2java);
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(json2java);
return redisTemplate;
}
@Bean
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory){
StringRedisTemplate stringRedisTemplate=new StringRedisTemplate();
stringRedisTemplate.setConnectionFactory(redisConnectionFactory);
return stringRedisTemplate;
}
/**
* 设置redis 集群连接
* @return r
*/
@Bean
@ConditionalOnProperty(value = "spring.redis.mode", havingValue = "cluster")
public RedisClusterConfiguration getRedisClusterConfiguration() {
RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration();
// 集群
Set<RedisNode> nodes = new HashSet<RedisNode>();
for (String ipPort : redisProperties.getCluster().getNodes()) {
String[] ipAndPort = ipPort.split(":");
nodes.add(new RedisNode(ipAndPort[0].trim(), Integer.parseInt(ipAndPort[1])));
}
redisClusterConfiguration.setClusterNodes(nodes);
// 未设置密码
// RedisPassword pwd = RedisPassword.of(redisServerPassword);
//redisClusterConfiguration.setPassword(pwd);
return redisClusterConfiguration;
}
/**
* singleten单机 模式redisConnectionFactory
*/
@Bean("redisConnectionFactory")
@ConditionalOnProperty(value = "spring.redis.mode",havingValue = "singleten")
public RedisStandaloneConfiguration redisConnectionFactoryModeSingleten() {
RedisStandaloneConfiguration standaloneConfiguration = new RedisStandaloneConfiguration();
standaloneConfiguration.setDatabase(redisProperties.getDatabase());
standaloneConfiguration.setHostName(redisProperties.getHost());
standaloneConfiguration.setPassword(redisProperties.getPassword());
standaloneConfiguration.setPort(redisProperties.getPort());
return standaloneConfiguration;
}
/**
* sentinel 哨兵模式configuration
* */
@Bean
@ConditionalOnProperty(value = "spring.redis.mode",havingValue = "sentinel")
public RedisSentinelConfiguration redisConfigurationModeSentinel() {
RedisSentinelConfiguration redisConfig = new RedisSentinelConfiguration();
redisConfig.setMaster(redisProperties.getSentinel().getMaster());
if(redisProperties.getSentinel().getNodes()!=null) {
List<RedisNode> sentinelNode=new ArrayList<RedisNode>();
for(String sen : redisProperties.getSentinel().getNodes()) {
String[] arr = sen.split(":");
sentinelNode.add(new RedisNode(arr[0],Integer.parseInt(arr[1])));
}
redisConfig.setDatabase(redisProperties.getDatabase());
redisConfig.setPassword(redisProperties.getPassword());
redisConfig.setSentinelPassword(redisConfig.getPassword());
redisConfig.setSentinels(sentinelNode);
}
return redisConfig;
}
}
直接打包扔到服务器上启动即可
这里是redis5.0.5linux版本
链接:https://pan.baidu.com/s/1QuXvOTO03g9kDC5xNbTOAQ
提取码:69y8