redis spring 哨兵 配置

来源:互联网 发布:刚出土的兵马俑知乎 编辑:程序博客网 时间:2024/05/23 22:50

    <?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代码  收藏代码
  1. import java.util.List;  
  2. import java.util.Map;  
  3. import java.util.Set;  
  4. import java.util.concurrent.TimeUnit;  
  5.   
  6. import org.springframework.beans.factory.annotation.Autowired;  
  7. import org.springframework.data.redis.core.StringRedisTemplate;  
  8. import org.springframework.data.redis.hash.HashMapper;  
  9. import org.springframework.stereotype.Service;  
  10. /** 
  11.  *  
  12.  * @author baoy 
  13.  * 
  14.  */  
  15. @Service  
  16. public class RedisRepositoryImpl implements RedisRepository {  
  17.     //private static final Logger logger = LoggerFactory.getLogger(RedisRepositoryImpl.class);  
  18.     @Autowired  
  19.     private StringRedisTemplate stringRedisTemplate;  
  20.     //@Autowired  
  21.     //private RedisTemplate redisTemplate;  
  22.       
  23.     private String keyPrefix = "";  
  24.     public void setKeyPrefix(String keyPrefix) {  
  25.         if (keyPrefix == null || "".equals(keyPrefix)) {  
  26.             this.keyPrefix = "";  
  27.         } else {  
  28.             this.keyPrefix = keyPrefix;  
  29.         }  
  30.     }  
  31.   
  32.     /** 
  33.      * <pre> 
  34.      * 命令:ttl key 
  35.      * 说明:以秒为单位,返回给定 key的剩余生存时间(TTL, time to live)。 
  36.      * </pre> 
  37.      * @param key 
  38.      * @return 
  39.      */  
  40.     public long ttl(String key) {  
  41.         return stringRedisTemplate.getExpire(keyPrefix+key);  
  42.     }  
  43.   
  44.     /** 
  45.      * <pre> 
  46.      * 命令:keys pattern 
  47.      * 说明:查找所有符合给定模式 pattern的 key 
  48.      * </pre> 
  49.      */  
  50.     public Set<String> keys(String pattern) {  
  51.         return stringRedisTemplate.keys(pattern);  
  52.     }  
  53.   
  54.     /** 
  55.      * <pre> 
  56.      * 命令:del key 
  57.      * 说明:删除一个key 
  58.      * </pre> 
  59.      * @param key 
  60.      */  
  61.     public void del(String key) {  
  62.         stringRedisTemplate.delete(keyPrefix+key);  
  63.     }  
  64.   
  65.     //****************String  
  66.   
  67.     /**  
  68.      * <pre>  
  69.      * 命令:set key value  
  70.      * 说明:将key的值设置为value  
  71.      * </pre>  
  72.      * @param key  
  73.      * @param value  
  74.      */  
  75.     public void set(String key, String value) {  
  76.         stringRedisTemplate.opsForValue().set(keyPrefix+key, value);  
  77.     }  
  78.     /** 
  79.      * <pre> 
  80.      * 命令:SET key value EX seconds 
  81.      * 说明:设置key值的同时,为该key设置超时时间(秒) 
  82.      * </pre> 
  83.      * @param key 
  84.      * @param value 
  85.      * @param timeout 
  86.      */  
  87.     public void set(String key, String value, long timeout) {  
  88.         stringRedisTemplate.opsForValue().set(keyPrefix+key, value, timeout, TimeUnit.SECONDS);  
  89.     }  
  90.     /** 
  91.      * <pre> 
  92.      * 命令:setNx key value 
  93.      * 含义:与set的区别是,如果不存在时,写入;存在时,不覆盖 
  94.      * </pre> 
  95.      * @param key 
  96.      * @param value 
  97.      */  
  98.     public boolean setNx(String key, String value) {  
  99.         return stringRedisTemplate.opsForValue().setIfAbsent(keyPrefix+key, value);  
  100.     }  
  101.     /** 
  102.      * <pre> 
  103.      * 命令:GET key 
  104.      * 说明:获取key值 
  105.      * </pre> 
  106.      * @param key 
  107.      * @return value 
  108.      */  
  109.     public String get(String key) {  
  110.         return stringRedisTemplate.opsForValue().get(keyPrefix+key);  
  111.     }  
  112.   
  113.     //****************Hash  
  114.     /**  
  115.      * <pre>  
  116.      * 命令:hSet key field value  
  117.      * 含义:  
  118.      * 1、将哈希表 key中的域 field的值设为 value  
  119.      * 2、覆盖旧有field的value  
  120.      * </pre>  
  121.      * @param key  
  122.      * @param field  
  123.      * @param value  
  124.      */  
  125.     public void hSet(String key, String field, Object value) {  
  126.         stringRedisTemplate.opsForHash().put(keyPrefix+key, field, value);  
  127.     }  
  128.     /** 
  129.      * <pre> 
  130.      * 命令:hSetNx key field value 
  131.      * 含义:与hSet的区别是,如果不存在时,写入;存在时,不覆盖 
  132.      * </pre> 
  133.      * @param key 
  134.      * @param field 
  135.      * @param value 
  136.      */  
  137.     public boolean hSetNx(String key, String field, Object value) {  
  138.         return stringRedisTemplate.opsForHash().putIfAbsent(keyPrefix+key, field, value);  
  139.     }  
  140.     /** 
  141.      * <pre> 
  142.      * 命令:HGET key field 
  143.      * 说明:返回哈希表 key中给定域 field的值 
  144.      * </pre> 
  145.      * @param key 
  146.      * @param field 
  147.      * @return 
  148.      */  
  149.     public String hGet(String key, String field) {  
  150.         return (String) stringRedisTemplate.opsForHash().get(keyPrefix+key, field);  
  151.     }  
  152.     /** 
  153.      * <pre> 
  154.      * 命令:hGetAll key 
  155.      * 说明:获取指定key先所有的key/value的键值对 
  156.      * </pre> 
  157.      * @param key 
  158.      * @return 
  159.      */  
  160.     public Map hGetAll(String key) {  
  161.         return (Map) stringRedisTemplate.opsForHash().entries(keyPrefix+key);  
  162.     }  
  163.     /** 
  164.      * <pre> 
  165.      * 命令:hDel key field [field ...] 
  166.      * 说明:删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。 
  167.      * </pre> 
  168.      * @param key 
  169.      * @param fields 
  170.      */  
  171.     public void hDel(String key, Object... fields) {  
  172.         stringRedisTemplate.opsForHash().delete(keyPrefix+key, fields);  
  173.     }  
  174.   
  175.     //****************List  
  176.     /**  
  177.      * <pre>  
  178.      * 命令:lPush key value  
  179.      * 说明:  
  180.      * 1.将一个值 value插入到列表 key的最左边  
  181.      * 2.当该列表key不存在时,则创建  
  182.      * </pre>  
  183.      * @param key  
  184.      * @param value  
  185.      * @return 执行 lPush命令后,列表的长度  
  186.      */  
  187.     public long lPush(String key, String value) {   
  188.         return stringRedisTemplate.opsForList().leftPush(keyPrefix+key, value);  
  189.     }  
  190.   
  191.     /** 
  192.      * <pre> 
  193.      * 命令:lPop key 
  194.      * 说明:移除该列表key最左边的元素 
  195.      * </pre> 
  196.      * @param key 
  197.      * @return 列表key的最左边元素。 
  198.      */  
  199.     public String lPop(String key) {  
  200.         return stringRedisTemplate.opsForList().leftPop(keyPrefix+key);  
  201.     }  
  202.       
  203.     public List<String> range(String key,int start,int end){  
  204.         return stringRedisTemplate.opsForList().range(keyPrefix+key, start, end);  
  205.     }  
  206.       
  207.     public long llen(String key){  
  208.         return stringRedisTemplate.opsForList().size(keyPrefix+key);  
  209.     }  
  210.   
  211.     /** 
  212.      * <pre> 
  213.      * 命令:rPush key value 
  214.      * 说明:向list最右边插入元素value 
  215.      * </pre> 
  216.      * @param key 
  217.      * @param value 
  218.      * @return 执行 rPush命令后,列表的长度 
  219.      */  
  220.     public long rPush(String key, String value) {   
  221.         return stringRedisTemplate.opsForList().rightPush(keyPrefix+key, value);  
  222.     }  
  223.   
  224.     /** 
  225.      * <pre> 
  226.      * 命令:rPop key 
  227.      * 说明:移除并返回列表 key的最右边元素 
  228.      * </pre> 
  229.      * @param key 
  230.      * @return 列表key的最右边元素。 
  231.      */  
  232.     public String rPop(String key) {  
  233.         return stringRedisTemplate.opsForList().rightPop(keyPrefix+key);  
  234.     }  
  235.   
  236.     //****************Set  
  237.     /**  
  238.      * <pre>  
  239.      * 命令:sAdd key value  
  240.      * 说明:  
  241.      * 1.将一个 value元素加入到集合 key当中  
  242.      * 2.已经存在于集合的 value元素将被忽略。  
  243.      * </pre>  
  244.      * @param key  
  245.      * @param value  
  246.      */  
  247.     public Long sAdd(String key, String value) {  
  248.         return stringRedisTemplate.opsForSet().add(keyPrefix+key, value);  
  249.     }  
  250.     /** 
  251.      * <pre> 
  252.      * 命令:sMembers key 
  253.      * 说明:返回集合 key 中的所有成员。 
  254.      * </pre> 
  255.      * @param key 
  256.      * @return 
  257.      */  
  258.     public Set<String> sMembers(String key) {  
  259.         return stringRedisTemplate.opsForSet().members(keyPrefix+key);  
  260.     }  
  261.     /** 
  262.      * <pre> 
  263.      * 命令:sRem key v1[v2 v3…]。 
  264.      * 说明:删除key中指定的values 
  265.      * </pre> 
  266.      * @param key 
  267.      * @param values 
  268.      * @return 返回被删除的元素的数量,如果没有被删除的元素,则返回0 
  269.      */  
  270.     public Long sRem(String key, Object... values) {  
  271.         return stringRedisTemplate.opsForSet().remove(keyPrefix+key, values);  
  272.     }  
  273.     //****************SortedSet  
  274.     /**  
  275.      * <pre>  
  276.      * 命令:zAdd key score member  
  277.      * 说明:将一个 member元素及其 score值加入到有序集 key当中。  
  278.      * <pre>  
  279.      * @param key  
  280.      * @param score  
  281.      * @param value  
  282.      */  
  283.     public void zAdd(String key, double score, String value) {  
  284.         stringRedisTemplate.opsForZSet().add(keyPrefix+key, value, score);  
  285.     }  
  286.     /** 
  287.      * <pre> 
  288.      * 命令:zRange key start stop 
  289.      * 说明:返回有序集 key中,指定区间内的成员。 
  290.      * </pre> 
  291.      * @param key 
  292.      * @param start 
  293.      * @param stop 
  294.      * @return 
  295.      */  
  296.     public Set<String> zRange(String key, double start, double stop) {  
  297.         return stringRedisTemplate.opsForZSet().rangeByScore(keyPrefix+key, start, stop);  
  298.     }  
  299.     //=====obj2map map2obj  
  300.     /** 
  301.      * 对象转map。可应用于多个对象(一个类中的属性是另外一个类) 
  302.      * @param t 
  303.      * @param mapper 
  304.      * @return 
  305.      */  
  306.     public <T> Map obj2map(T t, HashMapper<T, String, String> mapper) {  
  307.         return mapper.toHash(t);  
  308.     }  
  309.     /** 
  310.      * map转对象。只应用于单个对象 
  311.      * @param map 
  312.      * @param mapper 
  313.      * @return 
  314.      */  
  315.     public <T> T map2obj(Map map, HashMapper<T, String, String> mapper) {  
  316.         return mapper.fromHash(map);  
  317.     }  
  318. }  

 

Java代码  收藏代码
  1. import java.util.List;  
  2. import java.util.Map;  
  3. import java.util.Set;  
  4.   
  5. import org.springframework.data.redis.hash.HashMapper;  
  6. /** 
  7.  *  
  8.  * @author baoy 
  9.  * 
  10.  */  
  11. public interface RedisRepository {  
  12.     /** 
  13.      * <pre> 
  14.      * 命令:ttl key 
  15.      * 说明:以秒为单位,返回给定 key的剩余生存时间(TTL, time to live)。 
  16.      * </pre> 
  17.      * @param key 
  18.      * @return 
  19.      */  
  20.     long ttl(String key);  
  21.   
  22.     /** 
  23.      * <pre> 
  24.      * 命令:keys pattern 
  25.      * 说明:查找所有符合给定模式 pattern的 key 
  26.      * </pre> 
  27.      */  
  28.     Set<String> keys(String pattern);  
  29.   
  30.     /** 
  31.      * <pre> 
  32.      * 命令:del key 
  33.      * 说明:删除一个key 
  34.      * </pre> 
  35.      * @param key 
  36.      */  
  37.     void del(String key);  
  38.   
  39.     //****************String  
  40.   
  41.     /**  
  42.      * <pre>  
  43.      * 命令:set key value  
  44.      * 说明:将key的值设置为value  
  45.      * </pre>  
  46.      * @param key  
  47.      * @param value  
  48.      */  
  49.     void set(String key, String value);  
  50.     /** 
  51.      * <pre> 
  52.      * 命令:SET key value EX seconds 
  53.      * 说明:设置key值的同时,为该key设置超时时间(秒) 
  54.      * </pre> 
  55.      * @param key 
  56.      * @param value 
  57.      * @param timeout 
  58.      */  
  59.     void set(String key, String value, long timeout);  
  60.     /** 
  61.      * <pre> 
  62.      * 命令:setNx key value 
  63.      * 含义:与set的区别是,如果不存在时,写入;存在时,不覆盖 
  64.      * </pre> 
  65.      * @param key 
  66.      * @param value 
  67.      */  
  68.     boolean setNx(String key, String  value);   
  69.     /** 
  70.      * <pre> 
  71.      * 命令:GET key 
  72.      * 说明:获取key值 
  73.      * </pre> 
  74.      * @param key 
  75.      * @return value 
  76.      */  
  77.     String get(String key);  
  78.   
  79.     //****************Hash  
  80.     /**  
  81.      * <pre>  
  82.      * 命令:hSet key field value  
  83.      * 含义:  
  84.      * 1、将哈希表 key中的域 field的值设为 value  
  85.      * 2、覆盖旧有field的value  
  86.      * </pre>  
  87.      * @param key  
  88.      * @param field  
  89.      * @param value  
  90.      */  
  91.     void hSet(String key, String field, Object value);  
  92.     /** 
  93.      * <pre> 
  94.      * 命令:hSetNx key field value 
  95.      * 含义:与hSet的区别是,如果不存在时,写入;存在时,不覆盖 
  96.      * </pre> 
  97.      * @param key 
  98.      * @param field 
  99.      * @param value 
  100.      */  
  101.     boolean hSetNx(String key, String field, Object value);  
  102.     /** 
  103.      * <pre> 
  104.      * 命令:HGET key field 
  105.      * 说明:返回哈希表 key中给定域 field的值 
  106.      * </pre> 
  107.      * @param key 
  108.      * @param field 
  109.      * @return 
  110.      */  
  111.     String hGet(String key, String field);  
  112.     /** 
  113.      * <pre> 
  114.      * 命令:hGetAll key 
  115.      * 说明:获取指定key先所有的key/value的键值对 
  116.      * </pre> 
  117.      * @param key 
  118.      * @return 
  119.      */  
  120.     Map hGetAll(String key);  
  121.     /** 
  122.      * <pre> 
  123.      * 命令:hDel key field [field ...] 
  124.      * 说明:删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。 
  125.      * </pre> 
  126.      * @param key 
  127.      * @param fields 
  128.      */  
  129.     void hDel(String key, Object... fields);  
  130.   
  131.     //****************List  
  132.     /**  
  133.      * <pre>  
  134.      * 命令:lPush key value  
  135.      * 说明:  
  136.      * 1.将一个值 value插入到列表 key的最左边  
  137.      * 2.当该列表key不存在时,则创建  
  138.      * </pre>  
  139.      * @param key  
  140.      * @param value  
  141.      * @return 执行 lPush命令后,列表的长度  
  142.      */  
  143.     long lPush(String key, String value);  
  144.   
  145.     /** 
  146.      * <pre> 
  147.      * 命令:lPop key 
  148.      * 说明:移除该列表key最左边的元素 
  149.      * </pre> 
  150.      * @param key 
  151.      * @return 列表key的最左边元素。 
  152.      */  
  153.     String lPop(String key);  
  154.   
  155.     List<String> range(String key,int start,int end);  
  156.       
  157.     long llen(String key);  
  158.       
  159.     /** 
  160.      * <pre> 
  161.      * 命令:rPush key value 
  162.      * 说明:向list最右边插入元素value 
  163.      * </pre> 
  164.      * @param key 
  165.      * @param value 
  166.      * @return 执行 rPush命令后,列表的长度 
  167.      */  
  168.     long rPush(String key, String value);  
  169.   
  170.     /** 
  171.      * <pre> 
  172.      * 命令:rPop key 
  173.      * 说明:移除并返回列表 key的最右边元素 
  174.      * </pre> 
  175.      * @param key 
  176.      * @return 列表key的最右边元素。 
  177.      */  
  178.     String rPop(String key);  
  179.   
  180.     //****************Set  
  181.     /**  
  182.      * <pre>  
  183.      * 命令:sAdd key value  
  184.      * 说明:  
  185.      * 1.将一个 value元素加入到集合 key当中  
  186.      * 2.已经存在于集合的 value元素将被忽略。  
  187.      * </pre>  
  188.      * @param key  
  189.      * @param value  
  190.      */  
  191.     Long sAdd(String key, String value);  
  192.     /** 
  193.      * <pre> 
  194.      * 命令:sMembers key 
  195.      * 说明:返回集合 key 中的所有成员。 
  196.      * </pre> 
  197.      * @param key 
  198.      * @return 
  199.      */  
  200.     Set<String> sMembers(String key);  
  201.     /** 
  202.      * <pre> 
  203.      * 命令:sRem key v1[v2 v3…]。 
  204.      * 说明:删除key中指定的values 
  205.      * </pre> 
  206.      * @param key 
  207.      * @param values 
  208.      * @return 返回被删除的元素的数量,如果没有被删除的元素,则返回0 
  209.      */  
  210.     Long sRem(String key, Object... values);  
  211.     //****************SortedSet  
  212.     /**  
  213.      * <pre>  
  214.      * 命令:zAdd key score member  
  215.      * 说明:将一个 member元素及其 score值加入到有序集 key当中。  
  216.      * <pre>  
  217.      * @param key  
  218.      * @param score  
  219.      * @param value  
  220.      */  
  221.     void zAdd(String key, double score, String value);  
  222.     /** 
  223.      * <pre> 
  224.      * 命令:zRange key start stop 
  225.      * 说明:返回有序集 key中,指定区间内的成员。 
  226.      * </pre> 
  227.      * @param key 
  228.      * @param start 
  229.      * @param stop 
  230.      * @return 
  231.      */  
  232.     Set<String> zRange(String key, double start, double stop);  
  233.     //=====obj2map map2obj  
  234.     /** 
  235.      * 对象转map。可应用于多个对象(一个类中的属性是另外一个类) 
  236.      * @param t 
  237.      * @param mapper 
  238.      * @return 
  239.      */  
  240.     <T> Map obj2map(T t, HashMapper<T, String, String> mapper);  
  241.     /** 
  242.      * map转对象。只应用于单个对象 
  243.      * @param map 
  244.      * @param mapper 
  245.      * @return 
  246.      */  
  247.     <T> T map2obj(Map map, HashMapper<T, String, String> mapper);  

原创粉丝点击