redis的哨兵和cluster在java程式碼中的配置
阿新 • • 發佈:2018-12-18
1.哨兵: applicationContext.xml:
<!-- redis sentinel 配置 --> <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxTotal" value="${im.hs.server.redis.maxTotal}" /> <property name="minIdle" value="${im.hs.server.redis.minIdle}" /> <property name="maxWaitMillis" value="${im.hs.server.redis.maxWaitTime}" /> <property name="maxIdle" value="${im.hs.server.redis.maxIdle}" /> <property name="testOnBorrow" value="${im.hs.server.redis.testOnBorrow}" /> <property name="testOnReturn" value="true" /> <property name="testWhileIdle" value="true" /> </bean> <bean id="sentinelConfiguration" class="org.springframework.data.redis.connection.RedisSentinelConfiguration"> <property name="master"> <bean class="org.springframework.data.redis.connection.RedisNode"> <property name="name" value="${im.hs.server.redis.sentinel.masterName}"></property> </bean> </property> <property name="sentinels"> <set> <bean class="org.springframework.data.redis.connection.RedisNode"> <constructor-arg name="host" value="${im.hs.server.redis.sentinel1.host}"></constructor-arg> <constructor-arg name="port" value="${im.hs.server.redis.sentinel1.port}"></constructor-arg> </bean> <bean class="org.springframework.data.redis.connection.RedisNode"> <constructor-arg name="host" value="${im.hs.server.redis.sentinel2.host}"></constructor-arg> <constructor-arg name="port" value="${im.hs.server.redis.sentinel2.port}"></constructor-arg> </bean> <bean class="org.springframework.data.redis.connection.RedisNode"> <constructor-arg name="host" value="${im.hs.server.redis.sentinel3.host}"></constructor-arg> <constructor-arg name="port" value="${im.hs.server.redis.sentinel3.port}"></constructor-arg> </bean> </set> </property> </bean> <bean id="sentinelConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"> <property name="password" value="${im.hs.server.redis.sentinel.password}"></property> <constructor-arg name="sentinelConfig" ref="sentinelConfiguration"></constructor-arg> <constructor-arg name="poolConfig" ref="poolConfig"></constructor-arg> </bean> <!-- redis sentinel 配置結束 -->
redis-sentinel.properties:
# Redis settings #sentinel1的IP和埠 im.hs.server.redis.sentinel1.host=192.168.126.131 im.hs.server.redis.sentinel1.port=26379 #sentinel2的IP和埠 im.hs.server.redis.sentinel2.host=192.168.126.132 im.hs.server.redis.sentinel2.port=26380 #sentinel3的IP和埠 im.hs.server.redis.sentinel3.host=192.168.126.133 im.hs.server.redis.sentinel3.port=26381 #sentinel的鑑權密碼 im.hs.server.redis.sentinel.masterName=mymaster im.hs.server.redis.sentinel.password=12345678 #最大閒置連線數 im.hs.server.redis.maxIdle=500 #最大連線數,超過此連線時操作redis會報錯 im.hs.server.redis.maxTotal=5000 im.hs.server.redis.maxWaitTime=1000 im.hs.server.redis.testOnBorrow=true #最小閒置連線數,spring啟動的時候自動建立該數目的連線供應用程式使用,不夠的時候會申請。 im.hs.server.redis.minIdle=300
測試:
package com.shidebin.mongodb.spring_redis; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.DefaultTypedTuple; import org.springframework.data.redis.core.HashOperations; import org.springframework.data.redis.core.ListOperations; import org.springframework.data.redis.core.SetOperations; import org.springframework.data.redis.core.ValueOperations; import org.springframework.data.redis.core.ZSetOperations; import org.springframework.data.redis.core.ZSetOperations.TypedTuple; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.util.CollectionUtils; import com.alibaba.fastjson.JSON; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class RedisSentinelTest { @Autowired public ValueOperations<String,String> stringRedisTemplate; @Autowired public HashOperations<String,String,String> hashRedisTemplate; @Autowired public ListOperations<String,String> listRedisTemplate; @Autowired public SetOperations<String,String> setRedisTemplate; @Autowired public ZSetOperations<String,String> zSetRedisTemplate; @Test public void set() { //set name shidebin stringRedisTemplate.set("name", "shidebin"); //儲存物件 User user = User.getUserBuilder().name("shidebin").age(29).sex("男").build(); String jsonString = JSON.toJSONString(user); stringRedisTemplate.set("user:1", jsonString); //儲存list List<String> list = new ArrayList<String>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); String listJson = JSON.toJSONString(list); stringRedisTemplate.set("list", listJson); //儲存map Map<String,String> map = new HashMap<String,String>(); map.put("name", "shidebin"); map.put("age", "29"); map.put("phone", "18615412359"); String mapJson = JSON.toJSONString(map); stringRedisTemplate.set("map", mapJson); //mset country china city beijing stringRedisTemplate.multiSet(map); } @SuppressWarnings("unchecked") @Test public void get() { //取string String name = stringRedisTemplate.get("name"); System.out.println(name); //取物件 String userStr = stringRedisTemplate.get("user:1"); User parseObject = JSON.parseObject(userStr, User.class); System.out.println(userStr); System.out.println(parseObject); //取list String listStr = stringRedisTemplate.get("list"); List<String> parseObject2 = JSON.parseArray(listStr, String.class); System.out.println(listStr); System.out.println(parseObject2); //取map String mapStr = stringRedisTemplate.get("map"); Map<String,String> parseObject3 = JSON.parseObject(mapStr, Map.class); System.out.println(mapStr); System.out.println(parseObject3); //mget country city address List<String> multiGet = stringRedisTemplate.multiGet(Arrays.asList("name","age","phone")); System.out.println(multiGet); } //hash @Test public void hSet() { Map<String,String> map = new HashMap<String,String>(); map.put("name", "shidebin"); map.put("age", "29"); map.put("phone", "18615412359"); hashRedisTemplate.putAll("user:2", map); } @Test public void hGet() { Map<String, String> entries = hashRedisTemplate.entries("user:2"); System.out.println(entries); } //list @Test public void lpush() { List<String> list = new ArrayList<String>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); listRedisTemplate.leftPushAll("list:1", list); } @Test public void lget() { List<String> range = listRedisTemplate.range("list:1", 0, -1); System.out.println(range); } //list @Test public void sset() { List<String> list = new ArrayList<String>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); setRedisTemplate.add("set:1", list.toArray(new String[] {})); } @Test public void sget() { Set<String> members = setRedisTemplate.members("set:1"); System.out.println(members); } //list @Test public void zpush() { Set<TypedTuple<String>> set = new HashSet<TypedTuple<String>>(); TypedTuple<String> tt = new DefaultTypedTuple<String>("shidebin",Double.valueOf(23)); set.add(tt); zSetRedisTemplate.add("zset",set); } @Test public void zget() { Set<TypedTuple<String>> rangeWithScores = zSetRedisTemplate.rangeWithScores("zset", 0, -1); rangeWithScores.stream().forEach(action -> { System.out.println(action.getScore()); System.out.println(action.getValue()); }); } }
cluster配置: applicationContext.xml:
<!-- cluster 叢集配置 -->
<bean id="genericObjectPoolConfig" class="org.apache.commons.pool2.impl.GenericObjectPoolConfig">
<property name="maxTotal" value="${maxTotal}" />
<property name="minIdle" value="${minIdle}" />
<property name="maxIdle" value="${maxIdle}" />
<property name="maxWaitMillis" value="${maxWaitMillis}" />
<property name="testOnBorrow" value="${testOnBorrow}" />
</bean>
<bean id="jedisCluster" class="com.shidebin.mongodb.spring_redis.JedisClusterFactory">
<property name="addressConfig" value="classpath:redis-cluster.properties"/>
<property name="addressKeyPrefix" value="address" />
<property name="timeout" value="${timeout}" />
<!--代表叢集有幾臺redis-->
<property name="maxRedirections" value="${maxRedirections}" />
<property name="genericObjectPoolConfig" ref="genericObjectPoolConfig" />
</bean>
<!-- redis cluster 叢集配置結束 -->
redis_cluster.properties:
address1=192.168.126.128:6379
address2=192.168.126.129:6380
address3=192.168.126.130:6381
address4=192.168.126.131:6389
address5=192.168.126.132:6390
address6=192.168.126.133:6391
#最大連線數
maxTotal=1024
#客戶端超時時間單位是毫秒
timeout=300000
#最大連線數
maxActive=1024
#最小空閒數
minIdle=8
#最大空閒數
maxIdle=100
#最大建立連線等待時間
maxWaitMillis=1000
#redis叢集單位數
maxRedirections=6
testOnBorrow=true
測試:
package com.shidebin.mongodb.spring_redis;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import redis.clients.jedis.JedisCluster;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class RedisClusterTest {
@Autowired
JedisClusterFactory jf;
@Test
public void testCluster() {
JedisCluster jedisCluster = jf.getJedisCluster();
String set = jedisCluster.set("abd".getBytes(), "fasdfjklasd".getBytes());
System.out.println(set);
}
}