spring如何集成redis cluster
短信预约 -IT技能 免费直播动态提醒
本篇内容介绍了“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*$");@Overridepublic JedisCluster getObject() throws Exception {return jedisCluster;}@Overridepublic Class<? extends JedisCluster> getObjectType() {return (this.jedisCluster != null ? this.jedisCluster.getClass() : JedisCluster.class);}@Overridepublic 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);}}@Overridepublic 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.到此配置完成
使用时,直接注入即可, 如下所示:
@AutowiredJedisCluster jedisCluster;
“spring如何集成redis cluster”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341