源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

spring集成redis cluster详解

  • 时间:2020-07-10 03:09 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:spring集成redis cluster详解
客户端采用最新的jedis 2.7 [b]1.maven依赖:[/b]
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.3</version>
</dependency>
[b]2.增加spring 配置[/b]
<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>
[b]3.增加connect-redis.properties 配置文件 [/b] 这里配置了6个节点
address1=*:*
address2=*:*
address3=*:*
address4=*:*
address5=*:*
address6=*:*
[b]4.增加java类:[/b]
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;
 }
}
[b]5.到此配置完成[/b] 使用时,直接注入即可, 如下所示:
@Autowired
JedisCluster jedisCluster;
[b]总结[/b] 以上就是本文关于spring集成redis cluster详解的全部内容,希望对大家有所帮助。如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部