Redis JedisCluster Spring整合
来源:互联网 发布:淘宝网店运营公司 编辑:程序博客网 时间:2024/05/16 18:17
前言:
想用spring直接注入jedisCluster的,但是发现构造函数中的"Set<HostAndPort> nodes"参数无法配置,在网上找到一个例子,这才知道有FactoryBean<T>这个东西,也算是涨姿势了.原版的网址找不到了,但还是很感谢原作者.
1:spring配置JedisCluster
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 引入配置文件 --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:redis.properties" /> </bean> <!-- jedis 配置--> <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig" > <!--最大空闲数--> <property name="maxIdle" value="${redis.maxIdle}" /> <!--最大建立连接等待时间--> <property name="maxWaitMillis" value="${redis.maxWait}" /> <!--是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个--> <property name="testOnBorrow" value="${redis.testOnBorrow}" /> <property name="maxTotal" value="${redis.maxTotal}" /> <property name="minIdle" value="${redis.minIdle}" /> </bean > <bean id="jedisCluster" class="com.system.util.SimpleJedisCluster" > <property name="addressConfig"> <value>classpath:redis.properties</value> </property> <property name="addressKeyPrefix" value="cluster" /> <!-- 属性文件里 key的前缀 --> <property name="timeout" value="300000" /> <property name="maxRedirections" value="6" /> <property name="genericObjectPoolConfig" ref="poolConfig" /> </bean ></beans>
2:SimpleJedisCluster类
package com.system.util;import java.util.HashSet;import java.util.Properties;import java.util.Set;import java.util.TreeSet;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;/** * 类描述: * * @author fengyong * @version 1.0 * @since 1.0 * Created by fengyong on 16/10/29 下午4:07. */public class SimpleJedisCluster implements FactoryBean<JedisCluster>, InitializingBean { private Resource addressConfig; private String addressKeyPrefix ; private JedisCluster jedisCluster; private Integer timeout; private Integer maxRedirections; private GenericObjectPoolConfig poolConfig; private Pattern p = Pattern.compile("^.+[:]\\d{1,5}\\s*$"); public JedisCluster getObject() throws Exception { return jedisCluster; } public Class<? extends JedisCluster> getObjectType() { return (this.jedisCluster != null ? this.jedisCluster.getClass() : JedisCluster.class); } public boolean isSingleton() { return true; } private Set<HostAndPort> parseHostAndPort() { 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) { ex.printStackTrace(); } catch (Exception ex) { ex.printStackTrace(); } return null; } public void afterPropertiesSet() throws Exception { Set<HostAndPort> haps = this.parseHostAndPort(); jedisCluster = new JedisCluster(haps, timeout, maxRedirections,poolConfig); } 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 poolConfig) { this.poolConfig = poolConfig; }}
3:redis.properties配置#redis中心#redis的服务器地址redis.host=127.0.0.1#redis的服务端口redis.port=6379#密码redis.password=#最大空闲数redis.maxIdle=100#最大连接数redis.maxActive=300#最大建立连接等待时间redis.maxWait=1000#客户端超时时间单位是毫秒redis.timeout=100000redis.maxTotal=1000redis.minIdle=8#明是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个redis.testOnBorrow=true#sentinelspring.redis.sentinel.master=mymasterspring.redis.sentinel.node1.host=127.0.0.1spring.redis.sentinel.node2.host=127.0.0.1spring.redis.sentinel.node3.host=127.0.0.1spring.redis.sentinel.node1.port=26379spring.redis.sentinel.node2.port=26479spring.redis.sentinel.node3.port=26579#sentinel#clustercluster1.host.port=127.0.0.1:7000cluster2.host.port=127.0.0.1:7001cluster3.host.port=127.0.0.1:7002cluster4.host.port=127.0.0.1:7003cluster5.host.port=127.0.0.1:7004cluster6.host.port=127.0.0.1:7005cluster7.host.port=127.0.0.1:7006cluster8.host.port=127.0.0.1:7007#cluster
4:测试类
package com.test.redis;import com.test.BaseTest;import org.junit.Test;import org.springframework.beans.factory.annotation.Autowired;import redis.clients.jedis.JedisCluster;/** * 类描述: * * @author fengyong * @version 1.0 * @since 1.0 * Created by fengyong on 16/10/29 下午9:00. */public class RedisClusterTest extends BaseTest { @Autowired private JedisCluster jedisCluster; @Test public void cluster(){ jedisCluster.set("foo", "bar"); String value = jedisCluster.get("foo"); System.out.println(value); }}
0 0
- Redis JedisCluster Spring整合
- redis - JedisCluster Spring整合
- 分布式缓存技术redis学习系列(七)——spring整合jediscluster
- jedisCluster整合spring 的配置说明
- spring boot下JedisCluster客户端的配置,连接Redis集群
- spring boot下JedisCluster客户端的配置,连接Redis集群
- springboot整合jedisCluster
- springboot整合jedisCluster
- redis集群JedisCluster优化
- JedisCluster 操作集群Redis
- Spring Boot JedisCluster配置
- [Spring]Redis+Spring整合
- redis集群客户端JedisCluster优化
- Redis学习--JedisCluster源码解读
- 使用jedisCluster操作Redis集群
- 深入浅出Redis-Spring整合Redis
- 深入浅出Redis-Spring整合Redis
- 深入浅出Redis-Spring整合Redis
- [20160821]指针(3)
- hdu 5956 The Elder 2016ACM/ICPC沈阳赛区现场赛I
- jaspersoft studio创建jasperreport模板 summary显示page header(页眉)
- ping-pong操作
- hdu 5898 odd even number(acm/icpc沈阳赛区网络赛,数位DP)
- Redis JedisCluster Spring整合
- js获取当前页面的URL信息
- java正则表达式的常用案例
- JQuery-AJAX使用
- 再谈网游同步技术:实时动作游戏同步方式和传输协议选择
- [清华集训2015]V
- Struts2的执行流程
- nignx启动80端口一直占用
- leetcode_38. Count and Say 统计数字个数并说出来,组成新的字符串