Redis叢集:使用Spring和jedisCluster操作Redis叢集
阿新 • • 發佈:2018-12-27
jedisCluster
非Spring和jedisCluster操作Redis叢集
jar包
<!-- 指定版本號 --> <properties> <!-- JEDIS --> <jedis.version>2.7.1</jedis.version> </properties> <!-- JEDIS --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>${jedis.version}</version> </dependency>
測試程式碼
// 連線redis叢集 @Test public void testJedisCluster() { JedisPoolConfig config = new JedisPoolConfig(); // 最大連線數 config.setMaxTotal(30); // 最大連線空閒數 config.setMaxIdle(2); //叢集結點 Set<HostAndPort> jedisClusterNode = new HashSet<HostAndPort>(); jedisClusterNode.add(new HostAndPort("192.168.101.3", 7001)); jedisClusterNode.add(new HostAndPort("192.168.101.3", 7002)); jedisClusterNode.add(new HostAndPort("192.168.101.3", 7003)); jedisClusterNode.add(new HostAndPort("192.168.101.3", 7004)); jedisClusterNode.add(new HostAndPort("192.168.101.3", 7005)); jedisClusterNode.add(new HostAndPort("192.168.101.3", 7006)); JedisCluster jc = new JedisCluster(jedisClusterNode, config); JedisCluster jcd = new JedisCluster(jedisClusterNode); jcd.set("name", "zhangsan"); String value = jcd.get("name"); System.out.println(value); }
Spring和jedisCluster操作Redis叢集
配置applicationContext.xml
沒有叢集密碼
<!-- 連線池配置 --> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <!-- 最大連線數 --> <property name="maxTotal" value="30" /> <!-- 最大空閒連線數 --> <property name="maxIdle" value="10" /> <!-- 每次釋放連線的最大數目 --> <property name="numTestsPerEvictionRun" value="1024" /> <!-- 釋放連線的掃描間隔(毫秒) --> <property name="timeBetweenEvictionRunsMillis" value="30000" /> <!-- 連線最小空閒時間 --> <property name="minEvictableIdleTimeMillis" value="1800000" /> <!-- 連線空閒多久後釋放, 當空閒時間>該值 且 空閒連線>最大空閒連線數 時直接釋放 --> <property name="softMinEvictableIdleTimeMillis" value="10000" /> <!-- 獲取連線時的最大等待毫秒數,小於零:阻塞不確定的時間,預設-1 --> <property name="maxWaitMillis" value="1500" /> <!-- 在獲取連線的時候檢查有效性, 預設false --> <property name="testOnBorrow" value="true" /> <!-- 在空閒時檢查有效性, 預設false --> <property name="testWhileIdle" value="true" /> <!-- 連線耗盡時是否阻塞, false報異常,ture阻塞直到超時, 預設true --> <property name="blockWhenExhausted" value="false" /> </bean> <!-- redis叢集 --> <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster"> <constructor-arg index="0"> <set> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg index="0" value="192.168.101.3"></constructor-arg> <constructor-arg index="1" value="7001"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg index="0" value="192.168.101.3"></constructor-arg> <constructor-arg index="1" value="7002"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg index="0" value="192.168.101.3"></constructor-arg> <constructor-arg index="1" value="7003"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg index="0" value="192.168.101.3"></constructor-arg> <constructor-arg index="1" value="7004"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg index="0" value="192.168.101.3"></constructor-arg> <constructor-arg index="1" value="7005"></constructor-arg> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg index="0" value="192.168.101.3"></constructor-arg> <constructor-arg index="1" value="7006"></constructor-arg> </bean> </set> </constructor-arg> <constructor-arg index="1" ref="jedisPoolConfig"></constructor-arg> </bean>
如果需要設定redis叢集密碼,可以這樣配置
<!--配置redis叢集 -->
<bean id="jedisCuster" class="redis.clients.jedis.JedisCluster">
<constructor-arg name="jedisClusterNode">
<!--設定叢集節點 -->
<set>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="${redis.host}"/>
<constructor-arg name="port" value="${redis.port1}"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="${redis.host}"/>
<constructor-arg name="port" value="${redis.port2}"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="${redis.host}"/>
<constructor-arg name="port" value="${redis.port3}"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="${redis.host}"/>
<constructor-arg name="port" value="${redis.port4}"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="${redis.host}"/>
<constructor-arg name="port" value="${redis.port5}"/>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="${redis.host}"/>
<constructor-arg name="port" value="${redis.port6}"/>
</bean>
</set>
</constructor-arg>
<!--設定連線超時時間 -->
<constructor-arg name="connectionTimeout" value="${redis.timeout}"/>
<!--設定網路通訊超時時間 -->
<constructor-arg name="soTimeout" value="${redis.soTimeout}"/>
<!--設定叢集訪問密碼 -->
<constructor-arg name="password" value="${redis.password}"/>
<!--設定最大重試次數 -->
<constructor-arg name="maxAttempts" value="${redis.attempts}"/>
<!--設定jedisPool配置 -->
<constructor-arg name="poolConfig" ref="jedisPoolConfig"/>
</bean>
測試程式碼
private ApplicationContext applicationContext;
@Before
public void init() {
applicationContext = new ClassPathXmlApplicationContext(
"classpath:applicationContext.xml");
}
//redis叢集
@Test
public void testJedisCluster() {
JedisCluster jedisCluster = (JedisCluster) applicationContext
.getBean("jedisCluster");
jedisCluster.set("name", "zhangsan");
String value = jedisCluster.get("name");
System.out.println(value);
}