1. 程式人生 > >Redis叢集:使用Spring和jedisCluster操作Redis叢集

Redis叢集:使用Spring和jedisCluster操作Redis叢集

 

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);
}