管理spring session存入redis叢集的配置
阿新 • • 發佈:2019-01-05
package com.cmos.itframe.web.config;
import java.util.HashSet;
import java.util.Set;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.connection.RedisClusterConfiguration;
import org.springframework.data.redis.connection.RedisNode;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
import redis.clients.jedis.JedisPoolConfig;
/**
* RedisHttpSessionConfiguration的配置檔案
*
* 引入RedisHttpSessionConfiguration.class
*
* maxInactiveIntervalInSeconds設定session在redis裡的超時
*
* @author dong
*
*/
@EnableRedisHttpSession(maxInactiveIntervalInSeconds=1000)
public class SpringSessionConfig {
@Bean
public JedisConnectionFactory connectionFactory() {
JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(redisClusterConfiguration(),jedisPoolConfig());
jedisConnectionFactory.setUsePool(true);
jedisConnectionFactory.setTimeout(2000);
return jedisConnectionFactory;
}
/**
* redis叢集配置
*
* 配置redis叢集的結點及其它一些屬性
*
* @return
*/
private RedisClusterConfiguration redisClusterConfiguration(){
RedisClusterConfiguration redisClusterConfig = new RedisClusterConfiguration();
redisClusterConfig.setClusterNodes(getClusterNodes());
redisClusterConfig.setMaxRedirects(3);
return redisClusterConfig;
}
/**
* JedisPoolConfig 配置
*
* 配置JedisPoolConfig的各項屬性
*
* @return
*/
private JedisPoolConfig jedisPoolConfig(){
JedisPoolConfig jedisPoolConfig= new JedisPoolConfig();
//連線耗盡時是否阻塞, false報異常,ture阻塞直到超時, 預設true
jedisPoolConfig.setBlockWhenExhausted(true);
//是否啟用pool的jmx管理功能, 預設true
jedisPoolConfig.setJmxEnabled(true);
//預設就好
//jedisPoolConfig.setJmxNamePrefix("pool");
//jedis呼叫returnObject方法時,是否進行有效檢查
jedisPoolConfig.setTestOnReturn(true);
//是否啟用後進先出, 預設true
jedisPoolConfig.setLifo(true);
//最大空閒連線數, 預設8個
jedisPoolConfig.setMaxIdle(8);
//最大連線數, 預設8個
jedisPoolConfig.setMaxTotal(8);
//獲取連線時的最大等待毫秒數(如果設定為阻塞時BlockWhenExhausted),如果超時就拋異常, 小於零:阻塞不確定的時間, 預設-1
jedisPoolConfig.setMaxWaitMillis(-1);
//逐出連線的最小空閒時間 預設1800000毫秒(30分鐘)
jedisPoolConfig.setMinEvictableIdleTimeMillis(1800000);
//最小空閒連線數, 預設0
jedisPoolConfig.setMinIdle(0);
//每次逐出檢查時 逐出的最大數目 如果為負數就是 : 1/abs(n), 預設3
jedisPoolConfig.setNumTestsPerEvictionRun(3);
//物件空閒多久後逐出, 當空閒時間>該值 且 空閒連線>最大空閒數 時直接逐出,不再根據MinEvictableIdleTimeMillis判斷 (預設逐出策略)
jedisPoolConfig.setSoftMinEvictableIdleTimeMillis(1800000);
//在獲取連線的時候檢查有效性, 預設false
jedisPoolConfig.setTestOnBorrow(false);
//在空閒時檢查有效性, 預設false
jedisPoolConfig.setTestWhileIdle(false);
//逐出掃描的時間間隔(毫秒) 如果為負數,則不執行逐出執行緒, 預設-1
jedisPoolConfig.setTimeBetweenEvictionRunsMillis(-1);
return jedisPoolConfig;
}
/**
* redis叢集節點IP和埠的新增
*
* 節點:RedisNode redisNode = new RedisNode("127.0.0.1",6379);
*
* @return
*/
private Set<RedisNode> getClusterNodes(){
// 新增redis叢集的節點
Set<RedisNode> clusterNodes = new HashSet<RedisNode>();
// 這三個主節點是我本機的IP和埠,從節點沒有加入 ,這裡不是我真實的IP,雖然是內網,還是不要太直接了
clusterNodes.add(new RedisNode("192.168.1.1", 6380));
clusterNodes.add(new RedisNode("192.168.1.1", 6381));
clusterNodes.add(new RedisNode("192.168.1.1", 6382));
return clusterNodes;
}
}