最近在使用springboot做項目,使用redis做緩存。在外網開發的時候redis服務器沒有使用集群配置,所有就是用了RedisTemplate的方式進行連接redis服務器。但是項目代碼挪到內網開發以后,內網redis服務器使用了集群的配置方式。所以原來的配置文件和幫助類 都完全不能使用了,所以最近對redis集群的配置進行了簡單的研究。
1.首先是引入配置文件
gradle方式的配置文件 compile 'redis.clients:jedis:2.9.0'
2.application.yml的配置
spring:
application:
name: xxxx
session:
store-type: redis
redis:
password: xxxxx
clusterNodes: xxxxxxx
expireSeconds: 120
commandTimeout: 10000 #redis操作的超時時間
pool:
maxActive: 5000 #最大連接數
maxIdle: 30 #最大空閑連接數
minIdle: 5 #最小空閑連接數
maxWait: 3000 #獲取連接最大等待時間 ms #default -1
3.新增類RedisProperties
@Component
@ConfigurationProperties(prefix = "spring.redis")
public class RedisProperties {
private int expireSeconds;
private String clusterNodes;
private String password;
private int commandTimeout;
}
4.JedisCluster方式連接集群的配置
@Configuration
public class JedisClusterConfig {
@Autowired
private RedisProperties redisProperties;
/**
* 注意:
* 這里返回的JedisCluster是單例的,並且可以直接注入到其他類中去使用
* @return
*/
@Bean
public JedisCluster getJedisCluster() {
String[] serverArray = redisProperties.getClusterNodes().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,redisProperties.getCommandTimeout(),1000,1,redisProperties.getPassword() ,new GenericObjectPoolConfig());//需要密碼連接的創建對象方式
}
}
5.redis幫助
@Component public class RedisUtil { private static final Logger LOGGER = LoggerFactory.getLogger(RedisUtil.class); @Autowired private JedisCluster jedisCluster; /** * 設置緩存 * @param key 緩存key * @param value 緩存value */ public void set(String key, String value) { jedisCluster.set(key, value); LOGGER.debug("RedisUtil:set cache key={},value={}", key, value); } /** * 設置緩存對象 * @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); LOGGER.debug("RedisUtil:setWithExpireTime cache key={},value={},expireTime={}", key, value, expireTime); } /** * 獲取指定key的緩存 * @param key */ public String get(String key) { String value = jedisCluster.get(key); LOGGER.debug("RedisUtil:get cache key={},value={}",key, value); return value; } /** * 刪除指定key的緩存 * @param key */ public void delete(String key) { jedisCluster.del(key); LOGGER.debug("RedisUtil:delete cache key={}", key); } }
6.幫助類的使用方式
@Autowired
private RedisUtil redisUtil;
