redis集群搭建
- 这部分直接百度就可以
- 注意点
因为redis的redis.conf文件需要指定ip和端口,如果绑定了127.0.0.1时,可能非本
机访问会有问题。
在使用redis-trib.rb 创建集群时,也需要使用本机的ip,不要使用127.0.0.1或者
0.0.0.0代替。
集成spring
- 使用maven管理项目
pom.xm中依赖:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
RedisCluster的配置:
<bean id="env"
class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations">
<list>
<value>classpath:log4j.properties</value>
<value>classpath:Redis.properties</value>
</list>
</property>
</bean>
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<!--最大空闲数 -->
<property name="maxIdle" value="#{env['redis.maxIdle']}" />
<!--最大建立连接等待时间 -->
<property name="maxWaitMillis" value="#{env['redis.maxWait']}" />
<!--是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个 -->
<property name="testOnBorrow" value="#{env['redis.testOnBorrow']}" />
</bean>
<bean id="redisCluster" class="redis.clients.jedis.JedisCluster">
<constructor-arg>
<set>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="你的IP" />
<constructor-arg name="port" value="你的PORT" />
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="你的IP" />
<constructor-arg name="port" value="你的PORT" />
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="你的IP" />
<constructor-arg name="port" value="你的PORT" />
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="你的IP" />
<constructor-arg name="port" value="你的PORT" />
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="你的IP" />
<constructor-arg name="port" value="你的PORT" />
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="你的IP" />
<constructor-arg name="port" value="你的PORT" />
</bean>
</set>
</constructor-arg>
<constructor-arg name="connectionTimeout" value="6000" />
<constructor-arg name="soTimeout" value="2000" />
<constructor-arg name="maxAttempts" value="3" />
<!-- <constructor-arg name="password" value="123456" /> -->
<constructor-arg name="poolConfig">
<ref bean="jedisPoolConfig" />
</constructor-arg>
</bean>
测试代码:
ApplicationContext ctx=new ClassPathXmlApplicationContext("application-context.xml");
JedisCluster jc=(JedisCluster)ctx.getBean(JedisCluster.class);
System.out.println(jc.set("name", "yucong"));
System.out.println(jc.set("age", "28"));
System.out.println(jc.set("sex", "男"));
System.out.println(jc.get("name"));
System.out.println(jc.get("age"));
System.out.println(jc.get("sex"));
踩到的坑
在搭建redis集群时候,使用了redis-trib.rb集群创建时候,使用了0.0.0.0,使的redis cluster的slots生成的是127.0.0.1,而非本机ip:
此问题会导致哈希槽与真实的redis实例使用的是127.0.0.1地址,RedisCluster在获取真实实例ip时,拿到的是127.0.0.1而非真实的ip地址,导致连接失败!