redis spring 哨兵 配置
阿新 • • 發佈:2019-01-25
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <!-- redis最大連線數最好設定為200,不然會出現很多報錯 --> <property name="maxTotal" value="200"></property> <property name="maxIdle" value="200"></property> <property name="minIdle" value="6"></property> <!-- 在丟擲異常之前,呼叫的執行緒將會阻塞maxWaitMillis時長。預設值為true。推薦在生產環境下設定為true;測試環境下設定為false。 --> <property name="blockWhenExhausted" value="false"></property> <property name="maxWaitMillis" value="1000"></property> </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="mymaster"></property> </bean> </property> <property name="sentinels"> <set> <bean class="org.springframework.data.redis.connection.RedisNode"> <constructor-arg name="host" value="10.153.29.54"></constructor-arg> <constructor-arg name="port" value="16379"></constructor-arg> </bean> <bean class="org.springframework.data.redis.connection.RedisNode"> <constructor-arg name="host" value="10.153.29.54"></constructor-arg> <constructor-arg name="port" value="26379"></constructor-arg> </bean> <bean class="org.springframework.data.redis.connection.RedisNode"> <constructor-arg name="host" value="10.153.29.55"></constructor-arg> <constructor-arg name="port" value="16379"></constructor-arg> </bean> </set> </property> </bean> <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" destroy-method="destroy"> <property name="timeout" value="15000" /> <property name="database" value="0" /> <property name="password" value="" /> <property name="usePool" value="true" /> <property name="poolConfig" ref="jedisPoolConfig" /> <constructor-arg name="sentinelConfig" ref="sentinelConfiguration"></constructor-arg> </bean> <!-- redis template definition p表示對該bean裡面的屬性進行注入,格式為p:屬性名=注入的物件 效果與在bean裡面使用<property>標籤一樣 --> <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" p:connection-factory-ref="jedisConnectionFactory"> <property name="defaultSerializer"> <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" /> </property> </bean> <!-- 對string操作的封裝 --> <bean id="stringRedisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate" p:connection-factory-ref="jedisConnectionFactory" > <property name="defaultSerializer"> <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" /> </property> </bean> </beans>
Java程式碼
- import java.util.List;
- import java.util.Map;
- import java.util.Set;
- import java.util.concurrent.TimeUnit;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.data.redis.core.StringRedisTemplate;
- import org.springframework.data.redis.hash.HashMapper;
- import org.springframework.stereotype.Service;
- /**
- *
- * @author baoy
- *
- */
- @Service
- publicclass RedisRepositoryImpl implements RedisRepository {
- //private static final Logger logger = LoggerFactory.getLogger(RedisRepositoryImpl.class);
- @Autowired
- private StringRedisTemplate stringRedisTemplate;
- //@Autowired
- //private RedisTemplate redisTemplate;
- private String keyPrefix = "";
- publicvoid setKeyPrefix(String keyPrefix) {
- if (keyPrefix == null || "".equals(keyPrefix)) {
- this.keyPrefix = "";
- } else {
- this.keyPrefix = keyPrefix;
- }
- }
- /**
- * <pre>
- * 命令:ttl key
- * 說明:以秒為單位,返回給定 key的剩餘生存時間(TTL, time to live)。
- * </pre>
- * @param key
- * @return
- */
- publiclong ttl(String key) {
- return stringRedisTemplate.getExpire(keyPrefix+key);
- }
- /**
- * <pre>
- * 命令:keys pattern
- * 說明:查詢所有符合給定模式 pattern的 key
- * </pre>
- */
- public Set<String> keys(String pattern) {
- return stringRedisTemplate.keys(pattern);
- }
- /**
- * <pre>
- * 命令:del key
- * 說明:刪除一個key
- * </pre>
- * @param key
- */
- publicvoid del(String key) {
- stringRedisTemplate.delete(keyPrefix+key);
- }
- //****************String
- /**
- * <pre>
- * 命令:set key value
- * 說明:將key的值設定為value
- * </pre>
- * @param key
- * @param value
- */
- publicvoid set(String key, String value) {
- stringRedisTemplate.opsForValue().set(keyPrefix+key, value);
- }
- /**
- * <pre>
- * 命令:SET key value EX seconds
- * 說明:設定key值的同時,為該key設定超時時間(秒)
- * </pre>
- * @param key
- * @param value
- * @param timeout
- */
- publicvoid set(String key, String value, long timeout) {
- stringRedisTemplate.opsForValue().set(keyPrefix+key, value, timeout, TimeUnit.SECONDS);
- }
- /**
- * <pre>
- * 命令:setNx key value
- * 含義:與set的區別是,如果不存在時,寫入;存在時,不覆蓋
- * </pre>
- * @param key
- * @param value
- */
- publicboolean setNx(String key, String value) {
- return stringRedisTemplate.opsForValue().setIfAbsent(keyPrefix+key, value);
- }
- /**
- * <pre>
- * 命令:GET key
- * 說明:獲取key值
- * </pre>
- * @param key
- * @return value
- */
- public String get(String key) {
- return stringRedisTemplate.opsForValue().get(keyPrefix+key);
- }
- //****************Hash
- /**
- * <pre>
- * 命令:hSet key field value
- * 含義:
- * 1、將雜湊表 key中的域 field的值設為 value
- * 2、覆蓋舊有field的value
- * </pre>
- * @param key
- * @param field
- * @param value
- */
- publicvoid hSet(String key, String field, Object value) {
- stringRedisTemplate.opsForHash().put(keyPrefix+key, field, value);
- }
- /**
- * <pre>
- * 命令:hSetNx key field value
- * 含義:與hSet的區別是,如果不存在時,寫入;存在時,不覆蓋
- * </pre>
- * @param key
- * @param field
- * @param value
- */
- publicboolean hSetNx(String key, String field, Object value) {
- return stringRedisTemplate.opsForHash().putIfAbsent(keyPrefix+key, field, value);
- }
- /**
- * <pre>
- * 命令:HGET key field
- * 說明:返回雜湊表 key中給定域 field的值
- * </pre>
- * @param key
- * @param field
- * @return
- */
- public String hGet(String key, String field) {
- return (String) stringRedisTemplate.opsForHash().get(keyPrefix+key, field);
- }
- /**
- * <pre>
- * 命令:hGetAll key
- * 說明:獲取指定key先所有的key/value的鍵值對
- * </pre>
- * @param key
- * @return
- */
- public Map hGetAll(String key) {
- return (Map) stringRedisTemplate.opsForHash().entries(keyPrefix+key);
- }
- /**
- * <pre>
- * 命令:hDel key field [field ...]
- * 說明:刪除雜湊表 key 中的一個或多個指定域,不存在的域將被忽略。
- * </pre>
- * @param key
- * @param fields
- */
- publicvoid hDel(String key, Object... fields) {
- stringRedisTemplate.opsForHash().delete(keyPrefix+key, fields);
- }
- //****************List
- /**
- * <pre>
- * 命令:lPush key value
- * 說明:
- * 1.將一個值 value插入到列表 key的最左邊
- * 2.當該列表key不存在時,則建立
- * </pre>
- * @param key
- * @param value
- * @return 執行 lPush命令後,列表的長度
- */
- publiclong lPush(String key, String value) {
- return stringRedisTemplate.opsForList().leftPush(keyPrefix+key, value);
- }
- /**
- * <pre>
- * 命令:lPop key
- * 說明:移除該列表key最左邊的元素
- * </pre>
- * @param key
- * @return 列表key的最左邊元素。
- */
- public String lPop(String key) {
- return stringRedisTemplate.opsForList().leftPop(keyPrefix+key);
- }
- public List<String> range(String key,int start,int end){
- return stringRedisTemplate.opsForList().range(keyPrefix+key, start, end);
- }
- publiclong llen(String key){
- return stringRedisTemplate.opsForList().size(keyPrefix+key);
- }
- /**
- * <pre>
- * 命令:rPush key value
- * 說明:向list最右邊插入元素value
- * </pre>
- * @param key
- * @param value
- * @return 執行 rPush命令後,列表的長度
- */
- publiclong rPush(String key, String value) {
- return stringRedisTemplate.opsForList().rightPush(keyPrefix+key, value);
- }
- /**
- * <pre>
- * 命令:rPop key
- * 說明:移除並返回列表 key的最右邊元素
- * </pre>
- * @param key
- * @return 列表key的最右邊元素。
- */
- public String rPop(String key) {
- return stringRedisTemplate.opsForList().rightPop(keyPrefix+key);
- }
- //****************Set
- /**
- * <pre>
- * 命令:sAdd key value
- * 說明:
- * 1.將一個 value元素加入到集合 key當中
- * 2.已經存在於集合的 value元素將被忽略。
- * </pre>
- * @param key
- * @param value
- */
- public Long sAdd(String key, String value) {
- return stringRedisTemplate.opsForSet().add(keyPrefix+key, value);
- }
- /**
- * <pre>
- * 命令:sMembers key
- * 說明:返回集合 key 中的所有成員。
- * </pre>
- * @param key
- * @return
- */
- public Set<String> sMembers(String key) {
- return stringRedisTemplate.opsForSet().members(keyPrefix+key);
- }
- /**
- * <pre>
- * 命令:sRem key v1[v2 v3…]。
- * 說明:刪除key中指定的values
- * </pre>
- * @param key
- * @param values
- * @return 返回被刪除的元素的數量,如果沒有被刪除的元素,則返回0
- */
- public Long sRem(String key, Object... values) {
- return stringRedisTemplate.opsForSet().remove(keyPrefix+key, values);
- }
- //****************SortedSet
- /**
- * <pre>
- * 命令:zAdd key score member
- * 說明:將一個 member元素及其 score值加入到有序集 key當中。
- * <pre>
- * @param key
- * @param score
- * @param value
- */
- publicvoid zAdd(String key, double score, String value) {
- stringRedisTemplate.opsForZSet().add(keyPrefix+key, value, score);
- }
- /**
- * <pre>
- * 命令:zRange key start stop
- * 說明:返回有序集 key中,指定區間內的成員。
- * </pre>
- * @param key
- * @param start
- * @param stop
- * @return
- */
- public Set<String> zRange(String key, double start, double stop) {
- return stringRedisTemplate.opsForZSet().rangeByScore(keyPrefix+key, start, stop);
- }
- //=====obj2map map2obj
- /**
- * 物件轉map。可應用於多個物件(一個類中的屬性是另外一個類)
- * @param t
- * @param mapper
- * @return
- */
- public <T> Map obj2map(T t, HashMapper<T, String, String> mapper) {
- return mapper.toHash(t);
- }
- /**
- * map轉物件。只應用於單個物件
- * @param map
- * @param mapper
- * @return
- */
- public <T> T map2obj(Map map, HashMapper<T, String, String> mapper) {
- return mapper.fromHash(map);
- }
- }
- import java.util.List;
- import java.util.Map;
- import java.util.Set;
- import org.springframework.data.redis.hash.HashMapper;
- /**
- *
- * @author baoy
- *
- */
- publicinterface RedisRepository {
- /**
- * <pre>
- * 命令:ttl key
- * 說明:以秒為單位,返回給定 key的剩餘生存時間(TTL, time to live)。
- * </pre>
- * @param key
- * @return
- */
- long ttl(String key);
- /**
- * <pre>
- * 命令:keys pattern
- * 說明:查詢所有符合給定模式 pattern的 key
- * </pre>
- */
- Set<String> keys(String pattern);
- /**
- * <pre>
- * 命令:del key
- * 說明:刪除一個key
- * </pre>
- * @param key
- */
- void del(String key);
- //****************String
- /**
- * <pre>
- * 命令:set key value
- * 說明:將key的值設定為value
- * </pre>
- * @param key
- * @param value
- */
- void set(String key, String value);
- /**
- * <pre>
- * 命令:SET key value EX seconds
- * 說明:設定key值的同時,為該key設定超時時間(秒)
- * </pre>
- * @param key
- * @param value
- * @param timeout
- */
- void set(String key, String value, long timeout);
- /**
- * <pre>
- * 命令:setNx key value
- * 含義:與set的區別是,如果不存在時,寫入;存在時,不覆蓋
- * </pre>
- * @param key
- * @param value
- */
- boolean setNx(String key, String value);
- /**
- * <pre>
- * 命令:GET key
- * 說明:獲取key值
- * </pre>
- * @param key
- * @return value
- */
- String get(String key);
- //****************Hash
- /**
- * <pre>
- * 命令:hSet key field value
- * 含義:
- * 1、將雜湊表 key中的域 field的值設為 value
- * 2、覆蓋舊有field的value
- * </pre>
- * @param key
- * @param field
- * @param value
- */
- void hSet(String key, String field, Object value);
- /**
- * <pre>
- * 命令:hSetNx key field value
- * 含義:與hSet的區別是,如果不存在時,寫入;存在時,不覆蓋
- * </pre>
- * @param key
- * @param field
- * @param value
- */
- boolean hSetNx(String key, String field, Object value);
- /**
- * <pre>
- * 命令:HGET key field
- * 說明:返回雜湊表 key中給定域 field的值
- * </pre>
- * @param key
- * @param field
- * @return
- */
- String hGet(String key, String field);
- /**
- * <pre>
- * 命令:hGetAll key
- * 說明:獲取指定key先所有的key/value的鍵值對
- * </pre>
- * @param key
- * @return
- */
- Map hGetAll(String key);
- /**
- * <pre>
- * 命令:hDel key field [field ...]
- * 說明:刪除雜湊表 key 中的一個或多個指定域,不存在的域將被忽略。
- * </pre>
- * @param key
- * @param fields
- */
- void hDel(String key, Object... fields);
- //****************List
- /**
- * <pre>
- * 命令:lPush key value
- * 說明:
- * 1.將一個值 value插入到列表 key的最左邊
- * 2.當該列表key不存在時,則建立
- * </pre>
- * @param key
- * @param value
- * @return 執行 lPush命令後,列表的長度
- */
- long lPush(String key, String value);
- /**
- * <pre>
- * 命令:lPop key
- * 說明:移除該列表key最左邊的元素
- * </pre>
- * @param key
- * @return 列表key的最左邊元素。
- */
- String lPop(String key);
- List<String> range(String key,int start,int end);
- long llen(String key);
- /**
- * <pre>
- * 命令:rPush key value
- * 說明:向list最右邊插入元素value
- * </pre>
- * @param key
- * @param value
- * @return 執行 rPush命令後,列表的長度
- */
- long rPush(String key, String value);
- /**
- * <pre>
- * 命令:rPop key
- * 說明:移除並返回列表 key的最右邊元素
- * </pre>
- * @param key
- * @return 列表key的最右邊元素。
- */
- String rPop(String key);
- //****************Set
- /**
- * <pre>
- * 命令:sAdd key value
- * 說明:
- * 1.將一個 value元素加入到集合 key當中
- * 2.已經存在於集合的 value元素將被忽略。
- * </pre>
- * @param key
- * @param value
- */
- Long sAdd(String key, String value);
- /**
- * <pre>
- * 命令:sMembers key
- * 說明:返回集合 key 中的所有成員。
- * </pre>
- * @param key
- * @return
- */
- Set<String> sMembers(String key);
- /**
- * <pre>
- * 命令:sRem key v1[v2 v3…]。
- * 說明:刪除key中指定的values
- * </pre>
- * @param key
- * @param values
- * @return 返回被刪除的元素的數量,如果沒有被刪除的元素,則返回0
- */
- Long sRem(String key, Object... values);
- //****************SortedSet
- /**
- * <pre>
- * 命令:zAdd key score member
- * 說明:將一個 member元素及其 score值加入到有序集 key當中。
- * <pre>
- * @param key
- * @param score
- * @param value
- */
- void zAdd(String key, double score, String value);
- /**
- * <pre>
- * 命令:zRange key start stop
- * 說明:返回有序集 key中,指定區間內的成員。
- * </pre>
- * @param key
- * @param start
- * @param stop
- * @return
- */
- Set<String> zRange(String key, double start, double stop);
- //=====obj2map map2obj
- /**
- * 物件轉map。可應用於多個物件(一個類中的屬性是另外一個類)
- * @param t
- * @param mapper
- * @return
- */
- <T> Map obj2map(T t, HashMapper<T, String, String> mapper);
- /**
- * map轉物件。只應用於單個物件
- * @param map
- * @param mapper
- * @return
- */
- <T> T map2obj(Map map, HashMapper<T, String, String> mapper);
- }