SpringBoot2.0配置redis集群

SpringBoot2.0使用JedisCluster管理 配置redis集群

1.pom文件


            org.springframework.boot
            spring-boot-starter-data-redis
        
        
            redis.clients
            jedis
        

2.配置文件redis.properties

#客户端超时时间单位是毫秒 默认是2000
redis.timeout=10000
#最大空闲数
redis.maxIdle=300
#连接池的最大数据库连接数。设为0表示无限制,如果是jedis 2.4以后用redis.maxTotal
#redis.maxActive=600
#控制一个pool可分配多少个jedis实例,用来替换上面的redis.maxActive,如果是jedis 2.4以后用该属性
redis.maxTotal=2000
#最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
redis.maxWaitMillis=1000

redis.nodes=127.0.0.1:6479,127.0.0.1:6480,127.0.0.1:6481,127.0.0.1:6482,127.0.0.1:6483,127.0.0.1:6484
redis.expireSeconds=120
redis.commandTimeout=10000
redis.password=redis

3.通过配置文件注入JedisCluster

package top.xzhand.config;

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;

import java.util.HashSet;
import java.util.Set;


@Configuration
@PropertySource("classpath:redis.properties") //指定redis配置文件路径
public class JedisClusterConfig {
    @Value("${redis.maxIdle}")
    private Integer maxIdle;

    @Value("${redis.timeout}")
    private Integer timeout;

    @Value("${redis.maxTotal}")
    private Integer maxTotal;

    @Value("${redis.maxWaitMillis}")
    private Integer maxWaitMillis;
    @Value("${redis.nodes}")
    private String clusterNodes;

    @Value("${redis.password}")
    private String password;

    @Value("${redis.expireSeconds}")
    private int  expireSeconds;

    @Value("${redis.commandTimeout}")
    private int  commandTimeout;

  
    @Bean
    public JedisCluster getJedisCluster() {
        String[] serverArray = clusterNodes.split(",");//获取服务器数组
        Set nodes = new HashSet<>();

        for (String ipPort : serverArray) {
            String[] ipPortPair = ipPort.split(":");
            nodes.add(new HostAndPort(ipPortPair[0].trim(), Integer.valueOf(ipPortPair[1].trim())));
        }

        return new JedisCluster(nodes,commandTimeout,1000,1,password ,new GenericObjectPoolConfig());//需要密码连接的创建对象方式
    }


}

4.redis工具类

package top.xzhand.util;

import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import redis.clients.jedis.JedisCluster;

import java.util.concurrent.TimeUnit;


@Component
public class RedisClientTemplate {
    @Autowired
    private JedisCluster jedisCluster;

    /**
     * 设置缓存
     * @param key    缓存key
     * @param value  缓存value
     */
    public void set(String key, String value) {
        jedisCluster.set(key, value);
    }
    /*
     * 设置缓存字符串
     * @param key    缓存key
     * @param obj  缓存value
     */
    public  boolean set(String key, String obj , int expireTime) {

        try {
            jedisCluster.setex(key, expireTime, obj);
            return true;
        } catch (Exception var6) {
            var6.printStackTrace();
            return false;
        }
    }

    /**
     * 设置缓存对象
     * @param key    缓存key
     * @param obj  缓存value
     */
    public  void setObject(String key, T obj , int expireTime) {
        jedisCluster.setex(key, expireTime, JSON.toJSONString(obj));
    }

    /**
     * 获取指定key的缓存
     * @param key---JSON.parseObject(value, User.class);
     */
    public String getObject(String key) {
        return jedisCluster.get(key);
    }

    /**
     * 判断当前key值 是否存在
     *
     * @param key
     */
    public boolean hasKey(String key) {
        return jedisCluster.exists(key);
    }


    /**
     * 设置缓存,并且自己指定过期时间
     * @param key
     * @param value
     * @param expireTime 过期时间
     */
    public void setWithExpireTime( String key, String value, int expireTime) {
        jedisCluster.setex(key, expireTime, value);

    }

    /**
     * 获取指定key的缓存
     * @param key
     */
    public String get(String key) {
        String value = jedisCluster.get(key);
        return value;
    }

    /**
     * 删除指定key的缓存
     * @param key
     */
    public void delete(String key) {
        jedisCluster.del(key);
    }



}

5.测试redis

 
  
  @Autowired
  RedisClientTemplate redisClientTemplate;
   @Test
    public void testSet(){
        redisClientTemplate.set("june","june测试redis");
        System.out.println(redisClientTemplate.get("june"));
    }

 

你可能感兴趣的:(SpringBoot)