SpringBoot2.0使用JedisCluster管理 配置redis集群
1.pom文件
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency>
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<HostAndPort> 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 <T> 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")); }