2019獨角獸企業重金招聘Python工程師標準>>>
客戶端采用最新的jedis 2.7
1.
maven依賴:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.2</version>
</dependency>
?
2.
增加spring 配置
- <bean?name="genericObjectPoolConfig"?class="org.apache.commons.pool2.impl.GenericObjectPoolConfig"?>??
- ????????<property?name="maxWaitMillis"?value="-1"?/>??
- ????????<property?name="maxTotal"?value="1000"?/>??
- ????????<property?name="minIdle"?value="8"?/>??
- ????????<property?name="maxIdle"?value="100"?/>??
- </bean>??
- ??
- <bean?id="jedisCluster"?class="xxx.JedisClusterFactory">??
- ????<property?name="addressConfig">??
- ????????<value>classpath:connect-redis.properties</value>??
- ????</property>??
- ????<property?name="addressKeyPrefix"?value="address"?/>???<!--??屬性文件里??key的前綴?-->??
- ??????
- ????<property?name="timeout"?value="300000"?/>??
- ????<property?name="maxRedirections"?value="6"?/>??
- ????<property?name="genericObjectPoolConfig"?ref="genericObjectPoolConfig"?/>??
- </bean>??
?
3.
增加connect-redis.properties ?配置文件
這里配置了6個節點
- address1=172.16.23.27:6379??
- address2=172.16.23.27:6380??
- address3=172.16.23.27:6381??
- address4=172.16.23.27:6382??
- address5=172.16.23.27:6383??
- address6=172.16.23.27:6384??
?
4.
增加java類:
- import?java.util.HashSet;??
- import?java.util.Properties;??
- import?java.util.Set;??
- import?java.util.regex.Pattern;??
- ??
- import?org.apache.commons.pool2.impl.GenericObjectPoolConfig;??
- import?org.springframework.beans.factory.FactoryBean;??
- import?org.springframework.beans.factory.InitializingBean;??
- import?org.springframework.core.io.Resource;??
- ??
- import?redis.clients.jedis.HostAndPort;??
- import?redis.clients.jedis.JedisCluster;??
- ??
- public?class?JedisClusterFactory?implements?FactoryBean<JedisCluster>,?InitializingBean?{??
- ??
- ????private?Resource?addressConfig;??
- ????private?String?addressKeyPrefix?;??
- ??
- ????private?JedisCluster?jedisCluster;??
- ????private?Integer?timeout;??
- ????private?Integer?maxRedirections;??
- ????private?GenericObjectPoolConfig?genericObjectPoolConfig;??
- ??????
- ????private?Pattern?p?=?Pattern.compile("^.+[:]\\d{1,5}\\s*$");??
- ??
- ????@Override ??
- ????public?JedisCluster?getObject()?throws?Exception?{??
- ????????return?jedisCluster;??
- ????}??
- ??
- ????@Override ??
- ????public?Class<??extends?JedisCluster>?getObjectType()?{??
- ????????return?(this.jedisCluster?!=?null???this.jedisCluster.getClass()?:?JedisCluster.class);??
- ????}??
- ??
- ????@Override ??
- ????public?boolean?isSingleton()?{??
- ????????return?true;??
- ????}??
- ??
- ??
- ??
- ????private?Set<HostAndPort>?parseHostAndPort()?throws?Exception?{??
- ????????try?{??
- ????????????Properties?prop?=?new?Properties();??
- ????????????prop.load(this.addressConfig.getInputStream());??
- ??
- ????????????Set<HostAndPort>?haps?=?new?HashSet<HostAndPort>();??
- ????????????for?(Object?key?:?prop.keySet())?{??
- ??
- ????????????????if?(!((String)?key).startsWith(addressKeyPrefix))?{??
- ????????????????????continue;??
- ????????????????}??
- ??
- ????????????????String?val?=?(String)?prop.get(key);??
- ??
- ????????????????boolean?isIpPort?=?p.matcher(val).matches();??
- ??
- ????????????????if?(!isIpPort)?{??
- ????????????????????throw?new?IllegalArgumentException("ip?或?port?不合法");??
- ????????????????}??
- ????????????????String[]?ipAndPort?=?val.split(":");??
- ??
- ????????????????HostAndPort?hap?=?new?HostAndPort(ipAndPort[0],?Integer.parseInt(ipAndPort[1]));??
- ????????????????haps.add(hap);??
- ????????????}??
- ??
- ????????????return?haps;??
- ????????}?catch?(IllegalArgumentException?ex)?{??
- ????????????throw?ex;??
- ????????}?catch?(Exception?ex)?{??
- ????????????throw?new?Exception("解析?jedis?配置文件失敗",?ex);??
- ????????}??
- ????}??
- ??????
- ????@Override ??
- ????public?void?afterPropertiesSet()?throws?Exception?{??
- ????????Set<HostAndPort>?haps?=?this.parseHostAndPort();??
- ??????????
- ????????jedisCluster?=?new?JedisCluster(haps,?timeout,?maxRedirections,genericObjectPoolConfig);??
- ??????????
- ????}??
- ????public?void?setAddressConfig(Resource?addressConfig)?{??
- ????????this.addressConfig?=?addressConfig;??
- ????}??
- ??
- ????public?void?setTimeout(int?timeout)?{??
- ????????this.timeout?=?timeout;??
- ????}??
- ??
- ????public?void?setMaxRedirections(int?maxRedirections)?{??
- ????????this.maxRedirections?=?maxRedirections;??
- ????}??
- ??
- ????public?void?setAddressKeyPrefix(String?addressKeyPrefix)?{??
- ????????this.addressKeyPrefix?=?addressKeyPrefix;??
- ????}??
- ??
- ????public?void?setGenericObjectPoolConfig(GenericObjectPoolConfig?genericObjectPoolConfig)?{??
- ????????this.genericObjectPoolConfig?=?genericObjectPoolConfig;??
- ????}??
- ??
- }??
?
?
5.
到此配置完成
使用時,直接注入即可, 如下所示:
?
@Autowired
JedisCluster jedisCluster;
?
http://xyqck163.iteye.com/blog/2211108