当前位置:主页 > java教程 > spring集成redis cluster详解

关于spring集成redis cluster

发布:2020-03-18 11:48:34 191


给寻找编程代码教程的朋友们精选了Java相关的编程文章,网友许欣怿根据主题投稿了本篇教程内容,涉及到spring、redis、cluster、spring集成redis cluster详解相关内容,已被173网友关注,内容中涉及的知识点可以在下方直接下载获取。

spring集成redis cluster详解

客户端采用最新的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详解的全部内容,希望对大家有所帮助。如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!


参考资料

相关文章

  • SpringCloud微服务中跨域配置的方法详解

    发布:2023-04-17

    在使用SpringCloud实现微服务时,经常会碰到前端页面访问多个二级域名的情况,跨域是首先要解决的问题。解决这个问题,可以从两方面入手,一种方案是在微服务各自的业务模块中实现,即在SpringBoot层实现,另外一种方案就是在Gateway层实现


  • SpringBoot使用SensitiveWord实现敏感词过滤

    发布:2023-03-06

    这篇文章主要为大家详细介绍了SpringBoot如何使用SensitiveWord实现敏感词过滤功能,文中示例代码讲解详细,感兴趣的小伙伴可以了解一下


  • Spring校验器Validator用法详解

    发布:2019-06-05

    Spring校验器,参数校验从此简单。下面这篇文章主要给大家介绍了关于Spring中校验器(Validator)的相关资料,文中通过示例代码介绍非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习


  • Spring使用AOP完成统一结果封装实例demo

    发布:2023-04-14

    这篇文章主要介绍了Spring使用AOP完成统一结果封装,本文通过实现demo给大家详细讲解,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下


  • Springboot webscoket自定义定时器

    发布:2023-04-24

    这篇文章主要介绍了Springboot webscoket自定义定时器问题,总的来说这并不是一道难题,那为什么要拿出这道题介绍?拿出这道题真正想要传达的是解题的思路,以及不断优化探寻最优解的过程。希望通过这道题能给你带来一种解题优化的思路


  • Spring Boot日志控制代码实例

    发布:2020-01-05

    这篇文章主要为大家详细介绍了Spring Boot日志控制的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下


  • SpringBoot自动装配之@Enable深入讲解

    发布:2023-03-12

    这篇文章主要介绍了SpringBoot自动装配之@Enable,SpringBoot中提供了很多Enable开头的注解,这些注解都是用于动态启用某些功能的。而其底层原理是使用@Import注 解导入一些配置类,实现Bean的动态加载


  • Servlet+MyBatis项目转Spring Cloud微服务,多数据源配置实例详解

    发布:2020-01-15

    今天小编就为大家分享一篇关于Servlet+MyBatis项目转Spring Cloud微服务,多数据源配置修改建议,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧


网友讨论