java整合redis集群_Redis(七)-- SpringMVC整合Redis集群

1 packagecom.xbq.redis;2

3 importjava.util.HashSet;4 importjava.util.Properties;5 importjava.util.Set;6 importjava.util.regex.Pattern;7

8 importorg.apache.commons.pool2.impl.GenericObjectPoolConfig;9 importorg.springframework.beans.factory.FactoryBean;10 importorg.springframework.beans.factory.InitializingBean;11 importorg.springframework.core.io.Resource;12

13 importredis.clients.jedis.HostAndPort;14 importredis.clients.jedis.JedisCluster;15

16 /**

17 * Jedis集群工厂18 *@authorxbq19 * @Date 2017-05-1420 */

21 public class JedisClusterFactory implements InitializingBean,FactoryBean{22

23 privateResource addressConfig;24

25 //下面变量 对应spring redis配置文件中的 property的name

26 privateJedisCluster jedisCluster;27 privateString addressKeyPrefix;28 privateInteger timeout;29 privateInteger maxRedirections;30 privateGenericObjectPoolConfig genericObjectPoolConfig;31

32 //正则表达式 匹配 ip和port

33 private Pattern p = Pattern.compile("^.+[:]\\d{1,5}\\s*$");34

35 /**

36 * 实现 InitializingBean 的接口,初始化的 得到 jedisCluster37 */

38 public void afterPropertiesSet() throwsException {39 Set jedisClusterNode= this.parseHostAndPort();40 jedisCluster = newJedisCluster(jedisClusterNode, timeout, maxRedirections, genericObjectPoolConfig);41 }42

43 /**

44 * 实现 FactoryBean 的接口45 * 获取 jedisCluster对象46 */

47 public JedisCluster getObject() throwsException {48 returnjedisCluster;49 }50

51 /**

52 * 实现 FactoryBean 的接口53 * 获取 jedisCluster的类型54 */

55 public Class extends JedisCluster>getObjectType() {56 return (jedisCluster != null ? this.jedisCluster.getClass() : JedisCluster.class);57 }58

59 /**

60 * 实现 FactoryBean 的接口61 */

62 public booleanisSingleton() {63 return true;64 }65

66 /**

67 * 解析Jedis配置文件,看是否满足 IP和端口68 *@return

69 */

70 private Set parseHostAndPort() throwsException{71 Set hostAndPorts = new HashSet();72 try{73 Properties properties = newProperties();74 properties.load(this.addressConfig.getInputStream());75

76 for(Object key : properties.keySet()){77 //如果key不是以 addressKeyPrefix的值 开头,则continue

78 if(!((String)key).startsWith(addressKeyPrefix)){79 continue;80 }81 //根据 key从properties中取出值

82 String valus =(String) properties.get(key);83 //判断取出的value是否是ip和port

84 boolean isIPProt =p.matcher(valus).matches();85 if(!isIPProt){86 throw new IllegalArgumentException("ip和port不合法!");87 }88 String[] ipAndPort = valus.split(":");89 HostAndPort hostAndPort = new HostAndPort(ipAndPort[0], Integer.parseInt(ipAndPort[1]));90 hostAndPorts.add(hostAndPort);91 }92 } catch(Exception e) {93 throw new Exception("解析 jedis 配置文件失败!");94 }95 returnhostAndPorts;96 }97

98 //set方法

99 public voidsetJedisCluster(JedisCluster jedisCluster) {100 this.jedisCluster =jedisCluster;101 }102 public voidsetAddressKeyPrefix(String addressKeyPrefix) {103 this.addressKeyPrefix =addressKeyPrefix;104 }105 public voidsetTimeout(Integer timeout) {106 this.timeout =timeout;107 }108 public voidsetMaxRedirections(Integer maxRedirections) {109 this.maxRedirections =maxRedirections;110 }111 public voidsetGenericObjectPoolConfig(GenericObjectPoolConfig genericObjectPoolConfig) {112 this.genericObjectPoolConfig =genericObjectPoolConfig;113 }114 public voidsetAddressConfig(Resource addressConfig) {115 this.addressConfig =addressConfig;116 }117 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值