Springboot整合redis

https://blog.csdn.net/plei_yue/article/details/79362372java

前言在本篇文章中將SpringBoot整合Redis,使用的是RedisTemplate,分別實現了SpringBoot與redis的單機版、集羣版、哨兵模式的整合。
Maven依賴<!-- 整合redis -->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-data-redis</artifactId>        </dependency>12345項目下載及目錄結構1.[SpringBoot整合Redis實例] (http://download.csdn.net/download/plei_yue/10257285)  2.Redis安裝和相關配置參考
修改配置文件建立一個redis.properties配置文件。
#Matser的ip地址  redis.hostName=192.168.177.128#端口號  redis.port=6382#若是有密碼  redis.password=#客戶端超時時間單位是毫秒 默認是2000 redis.timeout=10000  
#最大空閒數  redis.maxIdle=300  #鏈接池的最大數據庫鏈接數。設爲0表示無限制,若是是jedis 2.4之後用redis.maxTotal  #redis.maxActive=600  #控制一個pool可分配多少個jedis實例,用來替換上面的redis.maxActive,若是是jedis 2.4之後用該屬性  redis.maxTotal=1000  #最大創建鏈接等待時間。若是超過此時間將接到異常。設爲-1表示無限制。  redis.maxWaitMillis=1000  #鏈接的最小空閒時間 默認1800000毫秒(30分鐘)  redis.minEvictableIdleTimeMillis=300000  #每次釋放鏈接的最大數目,默認3  redis.numTestsPerEvictionRun=1024  #逐出掃描的時間間隔(毫秒) 若是爲負數,則不運行逐出線程, 默認-1  redis.timeBetweenEvictionRunsMillis=30000  #是否在從池中取出鏈接前進行檢驗,若是檢驗失敗,則從池中去除鏈接並嘗試取出另外一個  redis.testOnBorrow=true  #在空閒時檢查有效性, 默認false  redis.testWhileIdle=true  
#redis集羣配置      spring.redis.cluster.nodes=192.168.177.128:7001,192.168.177.128:7002,192.168.177.128:7003,192.168.177.128:7004,192.168.177.128:7005,192.168.177.128:7006spring.redis.cluster.max-redirects=3
#哨兵模式#redis.sentinel.host1=192.168.177.128#redis.sentinel.port1=26379
#redis.sentinel.host2=172.20.1.231  #redis.sentinel.port2=263791234567891011121314151617181920212223242526272829303132333435363738封裝RedisTemplate的RedisUtil類import java.util.List;import java.util.Map;import java.util.Set;import java.util.concurrent.TimeUnit;
import org.springframework.data.redis.core.RedisTemplate;import org.springframework.util.CollectionUtils;
public class RedisUtil {
private RedisTemplate<String, Object> redisTemplate;  
    public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) {          this.redisTemplate = redisTemplate;      }      //=============================common============================      /**      * 指定緩存失效時間      * @param key 鍵      * @param time 時間(秒)      * @return      */      public boolean expire(String key,long time){          try {              if(time>0){                  redisTemplate.expire(key, time, TimeUnit.SECONDS);              }              return true;          } catch (Exception e) {              e.printStackTrace();              return false;          }      }  
    /**      * 根據key 獲取過時時間      * @param key 鍵 不能爲null      * @return 時間(秒) 返回0表明爲永久有效      */      public long getExpire(String key){          return redisTemplate.getExpire(key,TimeUnit.SECONDS);      }  
    /**      * 判斷key是否存在      * @param key 鍵      * @return true 存在 false不存在      */      public boolean hasKey(String key){          try {              return redisTemplate.hasKey(key);          } catch (Exception e) {              e.printStackTrace();              return false;          }      }  
    /**      * 刪除緩存      * @param key 能夠傳一個值 或多個      */      @SuppressWarnings("unchecked")      public void del(String ... key){          if(key!=null&&key.length>0){              if(key.length==1){                  redisTemplate.delete(key[0]);              }else{                  redisTemplate.delete(CollectionUtils.arrayToList(key));              }          }      }  
    //============================String=============================      /**      * 普通緩存獲取      * @param key 鍵      * @return 值      */      public Object get(String key){          return key==null?null:redisTemplate.opsForValue().get(key);      }  
    /**      * 普通緩存放入      * @param key 鍵      * @param value 值      * @return true成功 false失敗      */      public boolean set(String key,Object value) {           try {              redisTemplate.opsForValue().set(key, value);              return true;          } catch (Exception e) {              e.printStackTrace();              return false;          }  
    }  
    /**      * 普通緩存放入並設置時間      * @param key 鍵      * @param value 值      * @param time 時間(秒) time要大於0 若是time小於等於0 將設置無限期      * @return true成功 false 失敗      */      public boolean set(String key,Object value,long time){          try {              if(time>0){                  redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);              }else{                  set(key, value);              }              return true;          } catch (Exception e) {              e.printStackTrace();              return false;          }      }  
    /**      * 遞增      * @param key 鍵      * @param by 要增長几(大於0)      * @return      */      public long incr(String key, long delta){            if(delta<0){              throw new RuntimeException("遞增因子必須大於0");          }          return redisTemplate.opsForValue().increment(key, delta);      }  
    /**      * 遞減      * @param key 鍵      * @param by 要減小几(小於0)      * @return      */      public long decr(String key, long delta){            if(delta<0){              throw new RuntimeException("遞減因子必須大於0");          }          return redisTemplate.opsForValue().increment(key, -delta);        }    
    //================================Map=================================      /**      * HashGet      * @param key 鍵 不能爲null      * @param item 項 不能爲null      * @return 值      */      public Object hget(String key,String item){          return redisTemplate.opsForHash().get(key, item);      }  
    /**      * 獲取hashKey對應的全部鍵值      * @param key 鍵      * @return 對應的多個鍵值      */      public Map<Object,Object> hmget(String key){          return redisTemplate.opsForHash().entries(key);      }  
    /**      * HashSet      * @param key 鍵      * @param map 對應多個鍵值      * @return true 成功 false 失敗      */      public boolean hmset(String key, Map<String,Object> map){            try {              redisTemplate.opsForHash().putAll(key, map);              return true;          } catch (Exception e) {              e.printStackTrace();              return false;          }      }  
    /**      * HashSet 並設置時間      * @param key 鍵      * @param map 對應多個鍵值      * @param time 時間(秒)      * @return true成功 false失敗      */      public boolean hmset(String key, Map<String,Object> map, long time){            try {              redisTemplate.opsForHash().putAll(key, map);              if(time>0){                  expire(key, time);              }              return true;          } catch (Exception e) {              e.printStackTrace();              return false;          }      }  
    /**      * 向一張hash表中放入數據,若是不存在將建立      * @param key 鍵      * @param item 項      * @param value 值      * @return true 成功 false失敗      */      public boolean hset(String key,String item,Object value) {           try {              redisTemplate.opsForHash().put(key, item, value);              return true;          } catch (Exception e) {              e.printStackTrace();              return false;          }      }  
    /**      * 向一張hash表中放入數據,若是不存在將建立      * @param key 鍵      * @param item 項      * @param value 值      * @param time 時間(秒)  注意:若是已存在的hash表有時間,這裏將會替換原有的時間      * @return true 成功 false失敗      */      public boolean hset(String key,String item,Object value,long time) {           try {              redisTemplate.opsForHash().put(key, item, value);              if(time>0){                  expire(key, time);              }              return true;          } catch (Exception e) {              e.printStackTrace();              return false;          }      }  
    /**      * 刪除hash表中的值      * @param key 鍵 不能爲null      * @param item 項 可使多個 不能爲null      */      public void hdel(String key, Object... item){            redisTemplate.opsForHash().delete(key,item);      }   
    /**      * 判斷hash表中是否有該項的值      * @param key 鍵 不能爲null      * @param item 項 不能爲null      * @return true 存在 false不存在      */      public boolean hHasKey(String key, String item){          return redisTemplate.opsForHash().hasKey(key, item);      }   
    /**      * hash遞增 若是不存在,就會建立一個 並把新增後的值返回      * @param key 鍵      * @param item 項      * @param by 要增長几(大於0)      * @return      */      public double hincr(String key, String item,double by){            return redisTemplate.opsForHash().increment(key, item, by);      }  
    /**      * hash遞減      * @param key 鍵      * @param item 項      * @param by 要減小記(小於0)      * @return      */      public double hdecr(String key, String item,double by){            return redisTemplate.opsForHash().increment(key, item,-by);        }    
    //============================set=============================      /**      * 根據key獲取Set中的全部值      * @param key 鍵      * @return      */      public Set<Object> sGet(String key){          try {              return redisTemplate.opsForSet().members(key);          } catch (Exception e) {              e.printStackTrace();              return null;          }      }  
    /**      * 根據value從一個set中查詢,是否存在      * @param key 鍵      * @param value 值      * @return true 存在 false不存在      */      public boolean sHasKey(String key,Object value){          try {              return redisTemplate.opsForSet().isMember(key, value);          } catch (Exception e) {              e.printStackTrace();              return false;          }      }  
    /**      * 將數據放入set緩存      * @param key 鍵      * @param values 值 能夠是多個      * @return 成功個數      */      public long sSet(String key, Object...values) {          try {              return redisTemplate.opsForSet().add(key, values);          } catch (Exception e) {              e.printStackTrace();              return 0;          }      }  
    /**      * 將set數據放入緩存      * @param key 鍵      * @param time 時間(秒)      * @param values 值 能夠是多個      * @return 成功個數      */      public long sSetAndTime(String key,long time,Object...values) {          try {              Long count = redisTemplate.opsForSet().add(key, values);              if(time>0) expire(key, time);              return count;          } catch (Exception e) {              e.printStackTrace();              return 0;          }      }  
    /**      * 獲取set緩存的長度      * @param key 鍵      * @return      */      public long sGetSetSize(String key){          try {              return redisTemplate.opsForSet().size(key);          } catch (Exception e) {              e.printStackTrace();              return 0;          }      }  
    /**      * 移除值爲value的      * @param key 鍵      * @param values 值 能夠是多個      * @return 移除的個數      */      public long setRemove(String key, Object ...values) {          try {              Long count = redisTemplate.opsForSet().remove(key, values);              return count;          } catch (Exception e) {              e.printStackTrace();              return 0;          }      }      //===============================list=================================  
    /**      * 獲取list緩存的內容      * @param key 鍵      * @param start 開始      * @param end 結束  0 到 -1表明全部值      * @return      */      public List<Object> lGet(String key,long start, long end){          try {              return redisTemplate.opsForList().range(key, start, end);          } catch (Exception e) {              e.printStackTrace();              return null;          }      }  
    /**      * 獲取list緩存的長度      * @param key 鍵      * @return      */      public long lGetListSize(String key){          try {              return redisTemplate.opsForList().size(key);          } catch (Exception e) {              e.printStackTrace();              return 0;          }      }  
    /**      * 經過索引 獲取list中的值      * @param key 鍵      * @param index 索引  index>=0時, 0 表頭,1 第二個元素,依次類推;index<0時,-1,表尾,-2倒數第二個元素,依次類推      * @return      */      public Object lGetIndex(String key,long index){          try {              return redisTemplate.opsForList().index(key, index);          } catch (Exception e) {              e.printStackTrace();              return null;          }      }  
    /**      * 將list放入緩存      * @param key 鍵      * @param value 值      * @param time 時間(秒)      * @return      */      public boolean lSet(String key, Object value) {          try {              redisTemplate.opsForList().rightPush(key, value);              return true;          } catch (Exception e) {              e.printStackTrace();              return false;          }      }  
    /**      * 將list放入緩存      * @param key 鍵      * @param value 值      * @param time 時間(秒)      * @return      */      public boolean lSet(String key, Object value, long time) {          try {              redisTemplate.opsForList().rightPush(key, value);              if (time > 0) expire(key, time);              return true;          } catch (Exception e) {              e.printStackTrace();              return false;          }      }  
    /**      * 將list放入緩存      * @param key 鍵      * @param value 值      * @param time 時間(秒)      * @return      */      public boolean lSet(String key, List<Object> value) {          try {              redisTemplate.opsForList().rightPushAll(key, value);              return true;          } catch (Exception e) {              e.printStackTrace();              return false;          }      }  
    /**      * 將list放入緩存      * @param key 鍵      * @param value 值      * @param time 時間(秒)      * @return      */      public boolean lSet(String key, List<Object> value, long time) {          try {              redisTemplate.opsForList().rightPushAll(key, value);              if (time > 0) expire(key, time);              return true;          } catch (Exception e) {              e.printStackTrace();              return false;          }      }  
    /**      * 根據索引修改list中的某條數據      * @param key 鍵      * @param index 索引      * @param value 值      * @return      */      public boolean lUpdateIndex(String key, long index,Object value) {          try {              redisTemplate.opsForList().set(key, index, value);              return true;          } catch (Exception e) {              e.printStackTrace();              return false;          }      }   
    /**      * 移除N個值爲value       * @param key 鍵      * @param count 移除多少個      * @param value 值      * @return 移除的個數      */      public long lRemove(String key,long count,Object value) {          try {              Long remove = redisTemplate.opsForList().remove(key, count, value);              return remove;          } catch (Exception e) {              e.printStackTrace();              return 0;          }      }  }123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524SpringBoot整合單機版redis若是咱們只須要整合redis的單機版,只要在redis.conf中進行以下配置
@Configuration@PropertySource("classpath:config/redis.properties")public class RedisConfig {
    @Value("${redis.maxIdle}")    private Integer maxIdle;
    @Value("${redis.maxTotal}")    private Integer maxTotal;
    @Value("${redis.maxWaitMillis}")    private Integer maxWaitMillis;
    @Value("${redis.minEvictableIdleTimeMillis}")    private Integer minEvictableIdleTimeMillis;
    @Value("${redis.numTestsPerEvictionRun}")    private Integer numTestsPerEvictionRun;
    @Value("${redis.timeBetweenEvictionRunsMillis}")    private long timeBetweenEvictionRunsMillis;
    @Value("${redis.testOnBorrow}")    private boolean testOnBorrow;
    @Value("${redis.testWhileIdle}")    private boolean testWhileIdle;

    @Value("${spring.redis.cluster.nodes}")    private String clusterNodes; 
    @Value("${spring.redis.cluster.max-redirects}")    private Integer mmaxRedirectsac;
    /**     * JedisPoolConfig 鏈接池     * @return     */    @Bean    public JedisPoolConfig jedisPoolConfig() {        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();        // 最大空閒數        jedisPoolConfig.setMaxIdle(maxIdle);        // 鏈接池的最大數據庫鏈接數        jedisPoolConfig.setMaxTotal(maxTotal);        // 最大創建鏈接等待時間        jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);        // 逐出鏈接的最小空閒時間 默認1800000毫秒(30分鐘)        jedisPoolConfig.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);        // 每次逐出檢查時 逐出的最大數目 若是爲負數就是 : 1/abs(n), 默認3        jedisPoolConfig.setNumTestsPerEvictionRun(numTestsPerEvictionRun);        // 逐出掃描的時間間隔(毫秒) 若是爲負數,則不運行逐出線程, 默認-1        jedisPoolConfig.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);        // 是否在從池中取出鏈接前進行檢驗,若是檢驗失敗,則從池中去除鏈接並嘗試取出另外一個        jedisPoolConfig.setTestOnBorrow(testOnBorrow);        // 在空閒時檢查有效性, 默認false        jedisPoolConfig.setTestWhileIdle(testWhileIdle);        return jedisPoolConfig;    }    /**     * 單機版配置    * @Title: JedisConnectionFactory     * @param @param jedisPoolConfig    * @param @return    * @return JedisConnectionFactory    * @autor lpl    * @date 2018年2月24日    * @throws     */    @Bean    public JedisConnectionFactory JedisConnectionFactory(JedisPoolConfig jedisPoolConfig){        JedisConnectionFactory JedisConnectionFactory = new JedisConnectionFactory(jedisPoolConfig);        //鏈接池          JedisConnectionFactory.setPoolConfig(jedisPoolConfig);          //IP地址          JedisConnectionFactory.setHostName("192.168.177.128");          //端口號          JedisConnectionFactory.setPort(6379);          //若是Redis設置有密碼          //JedisConnectionFactory.setPassword(password);          //客戶端超時時間單位是毫秒          JedisConnectionFactory.setTimeout(5000);          return JedisConnectionFactory;     }
    /**     * 實例化 RedisTemplate 對象     *     * @return     */    @Bean    public RedisTemplate<String, Object> functionDomainRedisTemplate(RedisConnectionFactory redisConnectionFactory) {        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();        initDomainRedisTemplate(redisTemplate, redisConnectionFactory);        return redisTemplate;    }    /**     * 設置數據存入 redis 的序列化方式,並開啓事務     *      * @param redisTemplate     * @param factory     */    private void initDomainRedisTemplate(RedisTemplate<String, Object> redisTemplate, RedisConnectionFactory factory) {        //若是不配置Serializer,那麼存儲的時候缺省使用String,若是用User類型存儲,那麼會提示錯誤User can't cast to String!          redisTemplate.setKeySerializer(new StringRedisSerializer());        redisTemplate.setHashKeySerializer(new StringRedisSerializer());        redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());        // 開啓事務        redisTemplate.setEnableTransactionSupport(true);        redisTemplate.setConnectionFactory(factory);    }    /**     * 注入封裝RedisTemplate    * @Title: redisUtil     * @return RedisUtil    * @autor lpl    * @date 2017年12月21日    * @throws     */    @Bean(name = "redisUtil")    public RedisUtil redisUtil(RedisTemplate<String, Object> redisTemplate) {        RedisUtil redisUtil = new RedisUtil();        redisUtil.setRedisTemplate(redisTemplate);        return redisUtil;    }123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127SpringBoot整合Redis-Cluster集羣@Configuration@PropertySource("classpath:config/redis.properties")public class RedisConfig {
    @Value("${redis.maxIdle}")    private Integer maxIdle;
    @Value("${redis.maxTotal}")    private Integer maxTotal;
    @Value("${redis.maxWaitMillis}")    private Integer maxWaitMillis;
    @Value("${redis.minEvictableIdleTimeMillis}")    private Integer minEvictableIdleTimeMillis;
    @Value("${redis.numTestsPerEvictionRun}")    private Integer numTestsPerEvictionRun;
    @Value("${redis.timeBetweenEvictionRunsMillis}")    private long timeBetweenEvictionRunsMillis;
    @Value("${redis.testOnBorrow}")    private boolean testOnBorrow;
    @Value("${redis.testWhileIdle}")    private boolean testWhileIdle;

    @Value("${spring.redis.cluster.nodes}")    private String clusterNodes; 
    @Value("${spring.redis.cluster.max-redirects}")    private Integer mmaxRedirectsac;
    /**     * JedisPoolConfig 鏈接池     * @return     */    @Bean    public JedisPoolConfig jedisPoolConfig() {        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();        // 最大空閒數        jedisPoolConfig.setMaxIdle(maxIdle);        // 鏈接池的最大數據庫鏈接數        jedisPoolConfig.setMaxTotal(maxTotal);        // 最大創建鏈接等待時間        jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);        // 逐出鏈接的最小空閒時間 默認1800000毫秒(30分鐘)        jedisPoolConfig.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);        // 每次逐出檢查時 逐出的最大數目 若是爲負數就是 : 1/abs(n), 默認3        jedisPoolConfig.setNumTestsPerEvictionRun(numTestsPerEvictionRun);        // 逐出掃描的時間間隔(毫秒) 若是爲負數,則不運行逐出線程, 默認-1        jedisPoolConfig.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);        // 是否在從池中取出鏈接前進行檢驗,若是檢驗失敗,則從池中去除鏈接並嘗試取出另外一個        jedisPoolConfig.setTestOnBorrow(testOnBorrow);        // 在空閒時檢查有效性, 默認false        jedisPoolConfig.setTestWhileIdle(testWhileIdle);        return jedisPoolConfig;    }    /**     * Redis集羣的配置    * @return RedisClusterConfiguration    * @autor lpl    * @date 2017年12月22日    * @throws     */    @Bean    public RedisClusterConfiguration redisClusterConfiguration(){        RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration();        //Set<RedisNode> clusterNodes        String[] serverArray = clusterNodes.split(",");
        Set<RedisNode> nodes = new HashSet<RedisNode>();
        for(String ipPort:serverArray){            String[] ipAndPort = ipPort.split(":");            nodes.add(new RedisNode(ipAndPort[0].trim(),Integer.valueOf(ipAndPort[1])));        }
        redisClusterConfiguration.setClusterNodes(nodes);        redisClusterConfiguration.setMaxRedirects(mmaxRedirectsac);
        return redisClusterConfiguration;    }    /**     * 配置工廠    * @Title: JedisConnectionFactory     * @param @param jedisPoolConfig    * @param @return    * @return JedisConnectionFactory    * @autor lpl    * @date 2017年12月22日    * @throws     */    @Bean    public JedisConnectionFactory JedisConnectionFactory(JedisPoolConfig jedisPoolConfig,RedisClusterConfiguration redisClusterConfiguration){        JedisConnectionFactory JedisConnectionFactory = new JedisConnectionFactory(redisClusterConfiguration,jedisPoolConfig);
        return JedisConnectionFactory;     }
    /**     * 實例化 RedisTemplate 對象     *     * @return     */    @Bean    public RedisTemplate<String, Object> functionDomainRedisTemplate(RedisConnectionFactory redisConnectionFactory) {        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();        initDomainRedisTemplate(redisTemplate, redisConnectionFactory);        return redisTemplate;    }    /**     * 設置數據存入 redis 的序列化方式,並開啓事務     *      * @param redisTemplate     * @param factory     */    private void initDomainRedisTemplate(RedisTemplate<String, Object> redisTemplate, RedisConnectionFactory factory) {        //若是不配置Serializer,那麼存儲的時候缺省使用String,若是用User類型存儲,那麼會提示錯誤User can't cast to String!          redisTemplate.setKeySerializer(new StringRedisSerializer());        redisTemplate.setHashKeySerializer(new StringRedisSerializer());        redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());        // 開啓事務        redisTemplate.setEnableTransactionSupport(true);        redisTemplate.setConnectionFactory(factory);    }    /**     * 注入封裝RedisTemplate    * @Title: redisUtil     * @return RedisUtil    * @autor lpl    * @date 2017年12月21日    * @throws     */    @Bean(name = "redisUtil")    public RedisUtil redisUtil(RedisTemplate<String, Object> redisTemplate) {        RedisUtil redisUtil = new RedisUtil();        redisUtil.setRedisTemplate(redisTemplate);        return redisUtil;    }123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143SpringBoot整合Redis的哨兵模式@Configuration@PropertySource("classpath:config/redis.properties")public class RedisConfig {
    @Value("${redis.maxIdle}")    private Integer maxIdle;
    @Value("${redis.maxTotal}")    private Integer maxTotal;
    @Value("${redis.maxWaitMillis}")    private Integer maxWaitMillis;
    @Value("${redis.minEvictableIdleTimeMillis}")    private Integer minEvictableIdleTimeMillis;
    @Value("${redis.numTestsPerEvictionRun}")    private Integer numTestsPerEvictionRun;
    @Value("${redis.timeBetweenEvictionRunsMillis}")    private long timeBetweenEvictionRunsMillis;
    @Value("${redis.testOnBorrow}")    private boolean testOnBorrow;
    @Value("${redis.testWhileIdle}")    private boolean testWhileIdle;

    @Value("${spring.redis.cluster.nodes}")    private String clusterNodes; 
    @Value("${spring.redis.cluster.max-redirects}")    private Integer mmaxRedirectsac;
    /**     * JedisPoolConfig 鏈接池     * @return     */    @Bean    public JedisPoolConfig jedisPoolConfig() {        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();        // 最大空閒數        jedisPoolConfig.setMaxIdle(maxIdle);        // 鏈接池的最大數據庫鏈接數        jedisPoolConfig.setMaxTotal(maxTotal);        // 最大創建鏈接等待時間        jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);        // 逐出鏈接的最小空閒時間 默認1800000毫秒(30分鐘)        jedisPoolConfig.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);        // 每次逐出檢查時 逐出的最大數目 若是爲負數就是 : 1/abs(n), 默認3        jedisPoolConfig.setNumTestsPerEvictionRun(numTestsPerEvictionRun);        // 逐出掃描的時間間隔(毫秒) 若是爲負數,則不運行逐出線程, 默認-1        jedisPoolConfig.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);        // 是否在從池中取出鏈接前進行檢驗,若是檢驗失敗,則從池中去除鏈接並嘗試取出另外一個        jedisPoolConfig.setTestOnBorrow(testOnBorrow);        // 在空閒時檢查有效性, 默認false        jedisPoolConfig.setTestWhileIdle(testWhileIdle);        return jedisPoolConfig;    }/**     * 配置redis的哨兵    * @return RedisSentinelConfiguration    * @autor lpl    * @date 2017年12月21日    * @throws     */    @Bean    public RedisSentinelConfiguration sentinelConfiguration(){        RedisSentinelConfiguration redisSentinelConfiguration = new RedisSentinelConfiguration();        //配置matser的名稱        RedisNode redisNode = new RedisNode(hostName, port);        redisNode.setName("mymaster");        redisSentinelConfiguration.master(redisNode);        //配置redis的哨兵sentinel        RedisNode senRedisNode = new RedisNode(senHost1,senPort1);        Set<RedisNode> redisNodeSet = new HashSet<>();        redisNodeSet.add(senRedisNode);        redisSentinelConfiguration.setSentinels(redisNodeSet);        return redisSentinelConfiguration;    }    /**     * 配置工廠     * @param jedisPoolConfig     * @return     */    @Bean    public JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig jedisPoolConfig,RedisSentinelConfiguration sentinelConfig) {           JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(sentinelConfig,jedisPoolConfig);        return jedisConnectionFactory;    }/**     * 實例化 RedisTemplate 對象     *     * @return     */    @Bean    public RedisTemplate<String, Object> functionDomainRedisTemplate(RedisConnectionFactory redisConnectionFactory) {        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();        initDomainRedisTemplate(redisTemplate, redisConnectionFactory);        return redisTemplate;    }    /**     * 設置數據存入 redis 的序列化方式,並開啓事務     *      * @param redisTemplate     * @param factory     */    private void initDomainRedisTemplate(RedisTemplate<String, Object> redisTemplate, RedisConnectionFactory factory) {        //若是不配置Serializer,那麼存儲的時候缺省使用String,若是用User類型存儲,那麼會提示錯誤User can't cast to String!          redisTemplate.setKeySerializer(new StringRedisSerializer());        redisTemplate.setHashKeySerializer(new StringRedisSerializer());        redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());        // 開啓事務        redisTemplate.setEnableTransactionSupport(true);        redisTemplate.setConnectionFactory(factory);    }    /**     * 封裝RedisTemplate    * @Title: redisUtil     * @return RedisUtil    * @autor lpl    * @date 2017年12月21日    * @throws     */    @Bean(name = "redisUtil")    public RedisUtil redisUtil(RedisTemplate<String, Object> redisTemplate) {        RedisUtil redisUtil = new RedisUtil();        redisUtil.setRedisTemplate(redisTemplate);        return redisUtil;    }--------------------- 做者:w奔跑的蝸牛 來源:CSDN 原文:https://blog.csdn.net/plei_yue/article/details/79362372 版權聲明:本文爲博主原創文章,轉載請附上博文連接!node

相關文章
相關標籤/搜索