1.redis服务端集群搭建步骤:

  1.下载redis安装包,进行解压安装

  2.安装ruby、rubygems install ruby ,安装ruby的原因是,在进行集群的时候,使用的是ruby语言工具实现的,所以在集群之前首先需要搭建ruby的环境

  3.在上述步骤完成之后,便可以搭建集群环境,redis提供了两种集群搭建方法,执行脚本方法(安装包下面的util包中)和手动搭建。

  注意:

  1.在集群的时候,如果是远端客户端访问redis服务端,那么在分片的时候,需要使用Ip进行分片,下面会详细说

  2.在创建每个节点的时候,不要只用redis-server ,使用绝对路径下的redis-server xxx

  附件:在安装ruby的时候,需要gemredis,下载地址在下面。

2.客户端(java):

注意:

1.本文的客户端使用的是java,官网中对于java客户端也提供了不少的client,但是本文使用的是官方推荐的jedis。

2.在项目开发中,一般情况下都会用到spring来管理应用,本文也是如此,spring 本身也提供了对redis的集成支持,具体的网址:http://projects.spring.io/spring-data-redis,

 但是好像目前spring-data-redis不提供集群的功能,所以本文没有使用它,而是使用了原装的jedis来进行开发,如果在项目中没有用到集群的功能,则可以使用spirng-data-redis。

 

 

 

下面是具体的代码实现

 

1.maven依赖

 

 

Java代码  

java redis集群视频 redis集群java使用_java redis集群视频

1. <dependency>  
2.     <groupId>redis.clients</groupId>  
3.     <artifactId>jedis</artifactId>  
4. 2.7.2</version>  
5. </dependency>
  1.   

 

 

2.applicationContext.xml中的配置

 

 

Java代码  

java redis集群视频 redis集群java使用_java redis集群视频

1.    <!-- jedis cluster config -->  
2. "genericObjectPoolConfig" class="org.apache.commons.pool2.impl.GenericObjectPoolConfig" >  
3. "maxWaitMillis" value="-1" />  
4. "maxTotal" value="1000" />  
5. "minIdle" value="8" />  
6. "maxIdle" value="100" />  
7. </bean>  
8.   
9. <bean id="jedisCluster" class="com.besttone.subscribe.util.JedisClusterFactory">  
10. "addressConfig">  
11.         <value>classpath:redis-config.properties</value>  
12.     </property>  
13. "addressKeyPrefix" value="address" />    
14.       
15. "timeout" value="300000" />  
16. "maxRedirections" value="6" />  
17. "genericObjectPoolConfig" ref="genericObjectPoolConfig" />  
18. </bean>

 

 

3.JedisClusterFactory实现类

 

Java代码  

java redis集群视频 redis集群java使用_java redis集群视频

1. public class JedisClusterFactory implements FactoryBean<JedisCluster>, InitializingBean {  
2.   
3. private Resource addressConfig;  
4. private String addressKeyPrefix ;  
5.   
6. private JedisCluster jedisCluster;  
7. private Integer timeout;  
8. private Integer maxRedirections;  
9. private GenericObjectPoolConfig genericObjectPoolConfig;  
10.       
11. private Pattern p = Pattern.compile("^.+[:]\\d{1,5}\\s*$");  
12.   
13. @Override  
14. public JedisCluster getObject() throws Exception {  
15. return jedisCluster;  
16.     }  
17.   
18. @Override  
19. public Class<? extends JedisCluster> getObjectType() {  
20. return (this.jedisCluster != null ? this.jedisCluster.getClass() : JedisCluster.class);  
21.     }  
22.   
23. @Override  
24. public boolean isSingleton() {  
25. return true;  
26.     }  
27.   
28.   
29.   
30. private Set<HostAndPort> parseHostAndPort() throws Exception {  
31. try {  
32. new Properties();  
33. this.addressConfig.getInputStream());  
34.   
35. new HashSet<HostAndPort>();  
36. for (Object key : prop.keySet()) {  
37.   
38. if (!((String) key).startsWith(addressKeyPrefix)) {  
39. continue;  
40.                 }  
41.   
42.                 String val = (String) prop.get(key);  
43.   
44. boolean isIpPort = p.matcher(val).matches();  
45.   
46. if (!isIpPort) {  
47. throw new IllegalArgumentException("ip 或 port 不合法");  
48.                 }  
49. ":");  
50.   
51. new HostAndPort(ipAndPort[0], Integer.parseInt(ipAndPort[1]));  
52.                 haps.add(hap);  
53.             }  
54.   
55. return haps;  
56. catch (IllegalArgumentException ex) {  
57. throw ex;  
58. catch (Exception ex) {  
59. throw new Exception("解析 jedis 配置文件失败", ex);  
60.         }  
61.     }  
62.       
63. @Override  
64. public void afterPropertiesSet() throws Exception {  
65. this.parseHostAndPort();  
66.           
67. new JedisCluster(haps, timeout, maxRedirections,genericObjectPoolConfig);  
68.           
69.     }  
70. public void setAddressConfig(Resource addressConfig) {  
71. this.addressConfig = addressConfig;  
72.     }  
73.   
74. public void setTimeout(int timeout) {  
75. this.timeout = timeout;  
76.     }  
77.   
78. public void setMaxRedirections(int maxRedirections) {  
79. this.maxRedirections = maxRedirections;  
80.     }  
81.   
82. public void setAddressKeyPrefix(String addressKeyPrefix) {  
83. this.addressKeyPrefix = addressKeyPrefix;  
84.     }  
85.   
86. public void setGenericObjectPoolConfig(GenericObjectPoolConfig genericObjectPoolConfig) {  
87. this.genericObjectPoolConfig = genericObjectPoolConfig;  
88.     }  
89.   
90. }

 

4.redis-config.properties文件

 

   这是一个集群环境,六个节点(不同端口),三个master ,三个slaver

 

Java代码  

java redis集群视频 redis集群java使用_java redis集群视频

1. address1=192.168.30.139:7000  
2. address2=192.168.30.139:7001  
3. address3=192.168.30.139:7002  
4. address4=192.168.30.139:7003  
5. address5=192.168.30.139:7004  
6. address6=192.168.30.139:7005