linux部署redis集群以及springboot整合redis集群配置(附带redis的linux解压包)

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

猜你喜欢

转载自blog.csdn.net/weixin_43795840/article/details/129754162
今日推荐