spring集成redis cluster详解

 更新时间:2017年11月23日 11:32:05   作者:cenmin  
这篇文章主要介绍了spring集成redis cluster详解,分享了maven依赖,Spring配置,增加connect-redis.properties 配置文件等相关内容,具有一定参考价值,需要的朋友可以了解下。

客户端采用最新的jedis 2.7

1.maven依赖:

<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.3</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=*:*
address2=*:*
address3=*:*
address4=*:*
address5=*:*
address6=*:*

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;

总结

以上就是本文关于spring集成redis cluster详解的全部内容,希望对大家有所帮助。如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

相关文章

  • 详解Java的线程状态

    详解Java的线程状态

    本文主要为大家详细介绍一下Java的线程状态,文中的示例代码讲解详细,对我们学习有一定的帮助,感兴趣的小伙伴可以跟随小编学习一下
    2022-11-11
  • java.lang.Void类的解析与使用详解

    java.lang.Void类的解析与使用详解

    这篇文章主要介绍了java.lang.Void类的解析与使用详解,文中涉及到了java.lang.integer类的源码,分场景给大家介绍的非常详细,给大家补充介绍java.lang.Void 与 void的比较及使用,需要的朋友可以参考下
    2017-12-12
  • Java8 Lambda表达式模板方法实现解析

    Java8 Lambda表达式模板方法实现解析

    这篇文章主要介绍了Java8 Lambda表达式模板方法实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • 用Eclipse 创建一个简单的web项目(图文教程)

    用Eclipse 创建一个简单的web项目(图文教程)

    下面小编就为大家带来一篇用Eclipse 创建一个简单的web项目(图文教程)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • Java实现文件上传下载以及查看功能

    Java实现文件上传下载以及查看功能

    这篇文章主要为大家详细介绍了java如何实现文件上传和下载以及查看功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Java设计模式中的建造者模式详解

    Java设计模式中的建造者模式详解

    这篇文章主要介绍了Java设计模式中的建造者模式详解,建造者模式使我们日常工作中比较常见的一种设计模式,和工厂模式一样属于创建型设计模式,用于解耦对象创建和对象使用的逻辑,需要的朋友可以参考下
    2023-12-12
  • 浅谈一下Java中的悲观锁和乐观锁

    浅谈一下Java中的悲观锁和乐观锁

    这篇文章主要介绍了一下Java中的悲观锁和乐观锁,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • java中generic实例详解

    java中generic实例详解

    这篇文章主要介绍了java中generic实例详解,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • spring mybatis环境常量与枚举转换示例详解

    spring mybatis环境常量与枚举转换示例详解

    这篇文章主要为大家介绍了spring mybatis环境常量与枚举转换示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • 浅谈选择结构if语句和switch语句的区别

    浅谈选择结构if语句和switch语句的区别

    下面小编就为大家带来一篇浅谈选择结构if语句和switch语句的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07

最新评论