zl程序教程

您现在的位置是:首页 >  后端

当前栏目

spring集成 JedisCluster 连接 redis3.0 集群详解编程语言

Spring集成集群连接编程语言 详解 JedisCluster redis3.0
2023-06-13 09:11:51 时间

最近在公司做了 jedisCluster整合spring 的配置, 分享如下

客户端采用最新的jedis 2.7

1.

maven依赖:

 dependency 

 groupId redis.clients /groupId 

 artifactId jedis /artifactId 

 version 2.7.2 /version 

 /dependency  

2.

增加spring 配置


/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; 


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

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/19454.html

cjava