Springmvc集成redis集群
2017-02-28 00:00
357 查看
摘要: Springmvc集成redis集群
1.maven依赖:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.8.1</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=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类:
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;
注意:“no reachable node in cluster] with root cause”报错
(1)如果redis集群不是部署在本机,是部署在其它机器或者虚拟机上,一定注意redis.conf配置文件中的bind ip不要使用127.0.0.1,而是改成机器的ip地址,不然将无法访问redis集群,会因为找不到redis集群报这样的错误;
同时防火墙开放端口
(2)查看是否关闭了防火墙,如果没有关闭防火墙,利用如下命令关闭防火墙:
1.maven依赖:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.8.1</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=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类:
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;
注意:“no reachable node in cluster] with root cause”报错
(1)如果redis集群不是部署在本机,是部署在其它机器或者虚拟机上,一定注意redis.conf配置文件中的bind ip不要使用127.0.0.1,而是改成机器的ip地址,不然将无法访问redis集群,会因为找不到redis集群报这样的错误;
同时防火墙开放端口
$ iptables -I INPUT -p tcp --dport 7000 -j ACCEPT $ iptables -I INPUT -p tcp --dport 7001 -j ACCEPT $ iptables -I INPUT -p tcp --dport 7002 -j ACCEPT $ iptables -I INPUT -p tcp --dport 7003 -j ACCEPT $ iptables -I INPUT -p tcp --dport 7004 -j ACCEPT $ iptables -I INPUT -p tcp --dport 7005 -j ACCEPT
(2)查看是否关闭了防火墙,如果没有关闭防火墙,利用如下命令关闭防火墙:
1) 重启后生效 开启: chkconfig iptables on 关闭: chkconfig iptables off 2) 即时生效,重启后失效 开启: service iptables start 关闭: service iptables stop
相关文章推荐
- Springmvc集成redis集群
- springmvc集成redis
- spring集成redis,集成redis集群
- Quartz集成springMVC 的方案二(持久化任务、集群和分布式)
- dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb3.4-redis3.2整合(七)RabbitMQ工作原理和Spring的集成
- springboot集成redis集群(带密码并序列化)
- redis集群的Cluster方式配置以及spring的集成
- redis集成springmvc
- spring集成 JedisCluster 连接 redis3.0 集群
- Shiro与Redis集成,集群下的session共享
- Spring集成Jedis(不依赖spring-data-redis)(单机/集群模式)(待实践)
- IDEA springboot集成ehcache单节点和redis集群
- Shiro与Redis集成,集群下的session共享
- spring集成 JedisCluster 连接 redis3.0 集群
- Quartz集成springMVC 的方案二(持久化任务、集群和分布式)
- spring集成 JedisCluster 连接 redis3.0 集群
- spring集成 JedisCluster 连接 redis3.0 集群
- spring集成 JedisCluster 连接 redis3.0 集群
- dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb3.4-redis3.2整合(十一)之 spring中定时器quartz的整合续集(Quartz集群配置)
- spring+redis集成,策略设计,灵活配置,支持单机和集群