Windows環境下springboot集成redis的安裝與使用

 一,redis安裝html

首先咱們須要下載Windows版本的redis壓縮包地址以下:java

https://github.com/MicrosoftArchive/redis/releasesnode

鏈接打開後以下圖所示git

 

咱們選擇64位的壓縮包,下載後須要解壓,咱們解壓至D盤,以下圖所示:github

接下來咱們須要執行一些安裝命令web

1,在如上圖的目錄中,直接鍵入「cmdredis

2,在打開的cmd命令窗口中輸入 「redis-server.exe redis.windows.conf」 用於啓動redis服務spring

(注意採用這個命令至關於啓動一個臨時服務,若是當前窗口被關閉,則服務也會被關閉)數據庫

3,咱們再打開一個一樣的cmd命令窗口,在其中鍵入 「redis-cli」 ,這個命令的做用是啓動一個redis客戶端。客戶端默認的端口號是6379 若是咱們要修改端口號,須要打開咱們前面執行的命令中的conf文件redis.windows.conf 找到port 修改其後的端口號apache

4,在啓動的客戶端中檢查redis服務是否正常,咱們能夠進行數據的設置和讀取等操做,好比咱們能夠執行一個命令 「set redis jj」,而後咱們再執行一個命令「get redis」 就能夠將前面設置的123 查詢出來 ,以下圖所示

5,將redis服務註冊到咱們的Windows,咱們繼續新打開一個cmd窗口,執行命令 「redis-server --service-install redis.windows.conf」 這個時候呢,提示:Redis successfully installed as a service. 表示加入服務成功!

6,啓動註冊到Windows的redis服務。鍵入命令「redis-server.exe  --service-start」  可能會報錯,以下圖。緣由是咱們已經在這個端口綁定了一個服務,就是咱們前面啓動的那個所謂的臨時服務,這個時候咱們須要關閉剛纔啓動的臨時服務的窗口。

 7,再啓動若是仍是報上面的錯誤,那可能須要咱們調整註冊到Windows的服務爲本地系統服務,而不是網絡服務,以下圖所示。除此以外可能還會有防火牆等問題致使redis服務啓動失敗。

8,以下圖所示,服務啓動ok,這個時候咱們在繼續操做redis客戶端是沒有問題的。

二,springboot 集成redis

1,新建springboot工程,若是有不清楚如何新建的,請移步 http://www.javashuo.com/article/p-ypsgaemc-cw.html

2,在pom文件中加入redis jar包的引用

個人整個工程的pom文件以下,注意第34-38行,即爲引入的redis jar包

 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 2   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 3   <modelVersion>4.0.0</modelVersion>
 4 
 5   <groupId>com</groupId>
 6   <artifactId>redis</artifactId>
 7   <version>0.0.1-SNAPSHOT</version>
 8   <packaging>jar</packaging>
 9 
10   <name>redis</name>
11   <url>http://maven.apache.org</url>
12 
13   <properties>
14     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
15   </properties>
16   
17   <parent>
18         <groupId>org.springframework.boot</groupId>
19         <artifactId>spring-boot-starter-parent</artifactId>
20         <version>1.5.8.RELEASE</version>
21    </parent>
22 
23   <dependencies>
24     <dependency>
25       <groupId>junit</groupId>
26       <artifactId>junit</artifactId>
27       <version>3.8.1</version>
28       <scope>test</scope>
29     </dependency>
30       <dependency>
31             <groupId>org.springframework.boot</groupId>
32             <artifactId>spring-boot-starter-web</artifactId>
33         </dependency>
34       <dependency>
35             <groupId>org.springframework.boot</groupId>
36             <artifactId>spring-boot-starter-data-redis</artifactId>
37         </dependency> 
38   </dependencies>
39 </project>

3,編寫RedisConfig 類代碼

  1 package com.redis;
  2 
  3 import org.springframework.beans.factory.annotation.Value;
  4 import org.springframework.context.annotation.Bean;
  5 import org.springframework.context.annotation.Configuration;
  6 import org.springframework.context.annotation.PropertySource;
  7 import org.springframework.data.redis.connection.RedisConnectionFactory;
  8 import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
  9 import org.springframework.data.redis.core.RedisTemplate;
 10 import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
 11 import org.springframework.data.redis.serializer.StringRedisSerializer;
 12 
 13 import redis.clients.jedis.JedisPoolConfig;
 14 
 15 @Configuration
 16 @PropertySource("classpath:config/redis.properties")
 17 public class RedisConfig {
 18 
 19     @Value("${redis.maxIdle}")
 20     private Integer maxIdle;
 21 
 22     @Value("${redis.maxTotal}")
 23     private Integer maxTotal;
 24 
 25     @Value("${redis.maxWaitMillis}")
 26     private Integer maxWaitMillis;
 27 
 28     @Value("${redis.minEvictableIdleTimeMillis}")
 29     private Integer minEvictableIdleTimeMillis;
 30 
 31     @Value("${redis.numTestsPerEvictionRun}")
 32     private Integer numTestsPerEvictionRun;
 33 
 34     @Value("${redis.timeBetweenEvictionRunsMillis}")
 35     private long timeBetweenEvictionRunsMillis;
 36 
 37     @Value("${redis.testOnBorrow}")
 38     private boolean testOnBorrow;
 39 
 40     @Value("${redis.testWhileIdle}")
 41     private boolean testWhileIdle;
 42 
 43 
 44     @Value("${spring.redis.cluster.nodes}")
 45     private String clusterNodes; 
 46 
 47     @Value("${spring.redis.cluster.max-redirects}")
 48     private Integer mmaxRedirectsac;
 49 
 50     /**
 51      * JedisPoolConfig 鏈接池
 52      * @return
 53      */
 54     @Bean
 55     public JedisPoolConfig jedisPoolConfig() {
 56         JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
 57         // 最大空閒數
 58         jedisPoolConfig.setMaxIdle(maxIdle);
 59         // 鏈接池的最大數據庫鏈接數
 60         jedisPoolConfig.setMaxTotal(maxTotal);
 61         // 最大創建鏈接等待時間
 62         jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
 63         // 逐出鏈接的最小空閒時間 默認1800000毫秒(30分鐘)
 64         jedisPoolConfig.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
 65         // 每次逐出檢查時 逐出的最大數目 若是爲負數就是 : 1/abs(n), 默認3
 66         jedisPoolConfig.setNumTestsPerEvictionRun(numTestsPerEvictionRun);
 67         // 逐出掃描的時間間隔(毫秒) 若是爲負數,則不運行逐出線程, 默認-1
 68         jedisPoolConfig.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
 69         // 是否在從池中取出鏈接前進行檢驗,若是檢驗失敗,則從池中去除鏈接並嘗試取出另外一個
 70         jedisPoolConfig.setTestOnBorrow(testOnBorrow);
 71         // 在空閒時檢查有效性, 默認false
 72         jedisPoolConfig.setTestWhileIdle(testWhileIdle);
 73         System.out.println("redis 鏈接池配置完成!");
 74         return jedisPoolConfig;
 75     }
 76     /**
 77      * 單機版配置
 78     * @throws
 79      */
 80     @Bean
 81     public JedisConnectionFactory JedisConnectionFactory(JedisPoolConfig jedisPoolConfig){
 82         JedisConnectionFactory JedisConnectionFactory = new JedisConnectionFactory(jedisPoolConfig);
 83         //鏈接池  
 84         JedisConnectionFactory.setPoolConfig(jedisPoolConfig);  
 85         //IP地址  
 86         JedisConnectionFactory.setHostName("127.0.0.1");  
 87         //端口號  
 88         JedisConnectionFactory.setPort(6379);  
 89         //若是Redis設置有密碼  
 90         //JedisConnectionFactory.setPassword(password);  
 91         //客戶端超時時間單位是毫秒  
 92         JedisConnectionFactory.setTimeout(5000);  
 93         System.out.println("jedis  鏈接工廠配置完成!");
 94         return JedisConnectionFactory; 
 95     }
 96 
 97     /**
 98      * 實例化 RedisTemplate 對象
 99      * @return
100      */
101     @Bean
102     public RedisTemplate<String, Object> functionDomainRedisTemplate(JedisConnectionFactory redisConnectionFactory) {
103         RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
104         initDomainRedisTemplate(redisTemplate, redisConnectionFactory);
105         System.out.println("functionDomainRedisTemplates 配置完成!");
106         return redisTemplate;
107     }
108     /**
109      * 設置數據存入 redis 的序列化方式,並開啓事務
110      * @param redisTemplate
111      * @param factory
112      */
113     private void initDomainRedisTemplate(RedisTemplate<String, Object> redisTemplate, RedisConnectionFactory factory) {
114         //若是不配置Serializer,那麼存儲的時候缺省使用String,若是用User類型存儲,那麼會提示錯誤User can't cast to String!  
115         redisTemplate.setKeySerializer(new StringRedisSerializer());
116         redisTemplate.setHashKeySerializer(new StringRedisSerializer());
117         redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
118         redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
119         // 開啓事務
120         redisTemplate.setEnableTransactionSupport(true);
121         redisTemplate.setConnectionFactory(factory);
122     }
123     /**
124      * 注入封裝RedisTemplate
125     * @Title: redisUtil 
126     * @return RedisUtil
127     * @throws
128      */
129     @Bean(name = "redisUtil")
130     public RedisUtil redisUtil(RedisTemplate<String, Object> redisTemplate) {
131         RedisUtil redisUtil = new RedisUtil();
132         redisUtil.setRedisTemplate(redisTemplate);
133         System.out.println("redisUtil 配置完成!");
134         return redisUtil;
135     }
136 }

4,編寫RedisUtil類,用於操做redis數據庫

  1 package com.redis;
  2 
  3 import java.util.List;
  4 import java.util.Map;
  5 import java.util.Set;
  6 import java.util.concurrent.TimeUnit;
  7 
  8 import org.springframework.data.redis.core.RedisTemplate;
  9 import org.springframework.util.CollectionUtils;
 10 
 11 public class RedisUtil {
 12 
 13 private RedisTemplate<String, Object> redisTemplate;  
 14 
 15     public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) {  
 16         this.redisTemplate = redisTemplate;  
 17     }  
 18   
 19     /** 
 20      * 指定緩存失效時間 
 21      * @param key 鍵 
 22      * @param time 時間(秒) 
 23      * @return 
 24      */  
 25     public boolean expire(String key,long time){  
 26         try {  
 27             if(time>0){  
 28                 redisTemplate.expire(key, time, TimeUnit.SECONDS);  
 29             }  
 30             return true;  
 31         } catch (Exception e) {  
 32             e.printStackTrace();  
 33             return false;  
 34         }  
 35     }  
 36 
 37     /** 
 38      * 根據key 獲取過時時間 
 39      * @param key 鍵 不能爲null 
 40      * @return 時間(秒) 返回0表明爲永久有效 
 41      */  
 42     public long getExpire(String key){  
 43         return redisTemplate.getExpire(key,TimeUnit.SECONDS);  
 44     }  
 45 
 46     /** 
 47      * 判斷key是否存在 
 48      * @param key 鍵 
 49      * @return true 存在 false不存在 
 50      */  
 51     public boolean hasKey(String key){  
 52         try {  
 53             return redisTemplate.hasKey(key);  
 54         } catch (Exception e) {  
 55             e.printStackTrace();  
 56             return false;  
 57         }  
 58     }  
 59 
 60     /** 
 61      * 刪除緩存 
 62      * @param key 能夠傳一個值 或多個 
 63      */  
 64     @SuppressWarnings("unchecked")  
 65     public void del(String ... key){  
 66         if(key!=null&&key.length>0){  
 67             if(key.length==1){  
 68                 redisTemplate.delete(key[0]);  
 69             }else{  
 70                 redisTemplate.delete(CollectionUtils.arrayToList(key));  
 71             }  
 72         }  
 73     }  
 74 
 75     //============================String=============================  
 76     /** 
 77      * 普通緩存獲取 
 78      * @param key 鍵 
 79      * @return 80      */  
 81     public Object get(String key){  
 82         return key==null?null:redisTemplate.opsForValue().get(key);  
 83     }  
 84 
 85     /** 
 86      * 普通緩存放入 
 87      * @param key 鍵 
 88      * @param value 值 
 89      * @return true成功 false失敗 
 90      */  
 91     public boolean set(String key,Object value) {  
 92          try {  
 93             redisTemplate.opsForValue().set(key, value);  
 94             return true;  
 95         } catch (Exception e) {  
 96             e.printStackTrace();  
 97             return false;  
 98         }  
 99 
100     }  
101 
102     /** 
103      * 普通緩存放入並設置時間 
104      * @param key 鍵 
105      * @param value 值 
106      * @param time 時間(秒) time要大於0 若是time小於等於0 將設置無限期 
107      * @return true成功 false 失敗 
108      */  
109     public boolean set(String key,Object value,long time){  
110         try {  
111             if(time>0){  
112                 redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);  
113             }else{  
114                 set(key, value);  
115             }  
116             return true;  
117         } catch (Exception e) {  
118             e.printStackTrace();  
119             return false;  
120         }  
121     }  
122 
123     /** 
124      * 遞增 
125      * @param key 鍵 
126      * @param by 要增長几(大於0) 
127      * @return 
128      */  
129     public long incr(String key, long delta){    
130         if(delta<0){  
131             throw new RuntimeException("遞增因子必須大於0");  
132         }  
133         return redisTemplate.opsForValue().increment(key, delta);  
134     }  
135 
136     /** 
137      * 遞減 
138      * @param key 鍵 
139      * @param by 要減小几(小於0) 
140      * @return 
141      */  
142     public long decr(String key, long delta){    
143         if(delta<0){  
144             throw new RuntimeException("遞減因子必須大於0");  
145         }  
146         return redisTemplate.opsForValue().increment(key, -delta);    
147     }    
148 
149     //================================Map=================================  
150     /** 
151      * HashGet 
152      * @param key 鍵 不能爲null 
153      * @param item 項 不能爲null 
154      * @return155      */  
156     public Object hget(String key,String item){  
157         return redisTemplate.opsForHash().get(key, item);  
158     }  
159 
160     /** 
161      * 獲取hashKey對應的全部鍵值 
162      * @param key 鍵 
163      * @return 對應的多個鍵值 
164      */  
165     public Map<Object,Object> hmget(String key){  
166         return redisTemplate.opsForHash().entries(key);  
167     }  
168 
169     /** 
170      * HashSet 
171      * @param key 鍵 
172      * @param map 對應多個鍵值 
173      * @return true 成功 false 失敗 
174      */  
175     public boolean hmset(String key, Map<String,Object> map){    
176         try {  
177             redisTemplate.opsForHash().putAll(key, map);  
178             return true;  
179         } catch (Exception e) {  
180             e.printStackTrace();  
181             return false;  
182         }  
183     }  
184 
185     /** 
186      * HashSet 並設置時間 
187      * @param key 鍵 
188      * @param map 對應多個鍵值 
189      * @param time 時間(秒) 
190      * @return true成功 false失敗 
191      */  
192     public boolean hmset(String key, Map<String,Object> map, long time){    
193         try {  
194             redisTemplate.opsForHash().putAll(key, map);  
195             if(time>0){  
196                 expire(key, time);  
197             }  
198             return true;  
199         } catch (Exception e) {  
200             e.printStackTrace();  
201             return false;  
202         }  
203     }  
204 
205     /** 
206      * 向一張hash表中放入數據,若是不存在將建立 
207      * @param key 鍵 
208      * @param item 項 
209      * @param value 值 
210      * @return true 成功 false失敗 
211      */  
212     public boolean hset(String key,String item,Object value) {  
213          try {  
214             redisTemplate.opsForHash().put(key, item, value);  
215             return true;  
216         } catch (Exception e) {  
217             e.printStackTrace();  
218             return false;  
219         }  
220     }  
221 
222     /** 
223      * 向一張hash表中放入數據,若是不存在將建立 
224      * @param key 鍵 
225      * @param item 項 
226      * @param value 值 
227      * @param time 時間(秒)  注意:若是已存在的hash表有時間,這裏將會替換原有的時間 
228      * @return true 成功 false失敗 
229      */  
230     public boolean hset(String key,String item,Object value,long time) {  
231          try {  
232             redisTemplate.opsForHash().put(key, item, value);  
233             if(time>0){  
234                 expire(key, time);  
235             }  
236             return true;  
237         } catch (Exception e) {  
238             e.printStackTrace();  
239             return false;  
240         }  
241     }  
242 
243     /** 
244      * 刪除hash表中的值 
245      * @param key 鍵 不能爲null 
246      * @param item 項 可使多個 不能爲null 
247      */  
248     public void hdel(String key, Object... item){    
249         redisTemplate.opsForHash().delete(key,item);  
250     }   
251 
252     /** 
253      * 判斷hash表中是否有該項的值 
254      * @param key 鍵 不能爲null 
255      * @param item 項 不能爲null 
256      * @return true 存在 false不存在 
257      */  
258     public boolean hHasKey(String key, String item){  
259         return redisTemplate.opsForHash().hasKey(key, item);  
260     }   
261 
262     /** 
263      * hash遞增 若是不存在,就會建立一個 並把新增後的值返回 
264      * @param key 鍵 
265      * @param item 項 
266      * @param by 要增長几(大於0) 
267      * @return 
268      */  
269     public double hincr(String key, String item,double by){    
270         return redisTemplate.opsForHash().increment(key, item, by);  
271     }  
272 
273     /** 
274      * hash遞減 
275      * @param key 鍵 
276      * @param item 項 
277      * @param by 要減小記(小於0) 
278      * @return 
279      */  
280     public double hdecr(String key, String item,double by){    
281         return redisTemplate.opsForHash().increment(key, item,-by);    
282     }    
283 
284     //============================set=============================  
285     /** 
286      * 根據key獲取Set中的全部值 
287      * @param key 鍵 
288      * @return 
289      */  
290     public Set<Object> sGet(String key){  
291         try {  
292             return redisTemplate.opsForSet().members(key);  
293         } catch (Exception e) {  
294             e.printStackTrace();  
295             return null;  
296         }  
297     }  
298 
299     /** 
300      * 根據value從一個set中查詢,是否存在 
301      * @param key 鍵 
302      * @param value 值 
303      * @return true 存在 false不存在 
304      */  
305     public boolean sHasKey(String key,Object value){  
306         try {  
307             return redisTemplate.opsForSet().isMember(key, value);  
308         } catch (Exception e) {  
309             e.printStackTrace();  
310             return false;  
311         }  
312     }  
313 
314     /** 
315      * 將數據放入set緩存 
316      * @param key 鍵 
317      * @param values 值 能夠是多個 
318      * @return 成功個數 
319      */  
320     public long sSet(String key, Object...values) {  
321         try {  
322             return redisTemplate.opsForSet().add(key, values);  
323         } catch (Exception e) {  
324             e.printStackTrace();  
325             return 0;  
326         }  
327     }  
328 
329     /** 
330      * 將set數據放入緩存 
331      * @param key 鍵 
332      * @param time 時間(秒) 
333      * @param values 值 能夠是多個 
334      * @return 成功個數 
335      */  
336     public long sSetAndTime(String key,long time,Object...values) {  
337         try {  
338             Long count = redisTemplate.opsForSet().add(key, values);  
339             if(time>0) expire(key, time);  
340             return count;  
341         } catch (Exception e) {  
342             e.printStackTrace();  
343             return 0;  
344         }  
345     }  
346 
347     /** 
348      * 獲取set緩存的長度 
349      * @param key 鍵 
350      * @return 
351      */  
352     public long sGetSetSize(String key){  
353         try {  
354             return redisTemplate.opsForSet().size(key);  
355         } catch (Exception e) {  
356             e.printStackTrace();  
357             return 0;  
358         }  
359     }  
360 
361     /** 
362      * 移除值爲value的 
363      * @param key 鍵 
364      * @param values 值 能夠是多個 
365      * @return 移除的個數 
366      */  
367     public long setRemove(String key, Object ...values) {  
368         try {  
369             Long count = redisTemplate.opsForSet().remove(key, values);  
370             return count;  
371         } catch (Exception e) {  
372             e.printStackTrace();  
373             return 0;  
374         }  
375     }  
376     //===============================list=================================  
377 
378     /** 
379      * 獲取list緩存的內容 
380      * @param key 鍵 
381      * @param start 開始 
382      * @param end 結束  0 到 -1表明全部值 
383      * @return 
384      */  
385     public List<Object> lGet(String key,long start, long end){  
386         try {  
387             return redisTemplate.opsForList().range(key, start, end);  
388         } catch (Exception e) {  
389             e.printStackTrace();  
390             return null;  
391         }  
392     }  
393 
394     /** 
395      * 獲取list緩存的長度 
396      * @param key 鍵 
397      * @return 
398      */  
399     public long lGetListSize(String key){  
400         try {  
401             return redisTemplate.opsForList().size(key);  
402         } catch (Exception e) {  
403             e.printStackTrace();  
404             return 0;  
405         }  
406     }  
407 
408     /** 
409      * 經過索引 獲取list中的值 
410      * @param key 鍵 
411      * @param index 索引  index>=0時, 0 表頭,1 第二個元素,依次類推;index<0時,-1,表尾,-2倒數第二個元素,依次類推 
412      * @return 
413      */  
414     public Object lGetIndex(String key,long index){  
415         try {  
416             return redisTemplate.opsForList().index(key, index);  
417         } catch (Exception e) {  
418             e.printStackTrace();  
419             return null;  
420         }  
421     }  
422 
423     /** 
424      * 將list放入緩存 
425      * @param key 鍵 
426      * @param value 值 
427      * @param time 時間(秒) 
428      * @return 
429      */  
430     public boolean lSet(String key, Object value) {  
431         try {  
432             redisTemplate.opsForList().rightPush(key, value);  
433             return true;  
434         } catch (Exception e) {  
435             e.printStackTrace();  
436             return false;  
437         }  
438     }  
439 
440     /** 
441      * 將list放入緩存 
442      * @param key 鍵 
443      * @param value 值 
444      * @param time 時間(秒) 
445      * @return 
446      */  
447     public boolean lSet(String key, Object value, long time) {  
448         try {  
449             redisTemplate.opsForList().rightPush(key, value);  
450             if (time > 0) expire(key, time);  
451             return true;  
452         } catch (Exception e) {  
453             e.printStackTrace();  
454             return false;  
455         }  
456     }  
457 
458     /** 
459      * 將list放入緩存 
460      * @param key 鍵 
461      * @param value 值 
462      * @param time 時間(秒) 
463      * @return 
464      */  
465     public boolean lSet(String key, List<Object> value) {  
466         try {  
467             redisTemplate.opsForList().rightPushAll(key, value);  
468             return true;  
469         } catch (Exception e) {  
470             e.printStackTrace();  
471             return false;  
472         }  
473     }  
474 
475     /** 
476      * 將list放入緩存 
477      * @param key 鍵 
478      * @param value 值 
479      * @param time 時間(秒) 
480      * @return 
481      */  
482     public boolean lSet(String key, List<Object> value, long time) {  
483         try {  
484             redisTemplate.opsForList().rightPushAll(key, value);  
485             if (time > 0) expire(key, time);  
486             return true;  
487         } catch (Exception e) {  
488             e.printStackTrace();  
489             return false;  
490         }  
491     }  
492 
493     /** 
494      * 根據索引修改list中的某條數據 
495      * @param key 鍵 
496      * @param index 索引 
497      * @param value 值 
498      * @return 
499      */  
500     public boolean lUpdateIndex(String key, long index,Object value) {  
501         try {  
502             redisTemplate.opsForList().set(key, index, value);  
503             return true;  
504         } catch (Exception e) {  
505             e.printStackTrace();  
506             return false;  
507         }  
508     }   
509 
510     /** 
511      * 移除N個值爲value  
512      * @param key 鍵 
513      * @param count 移除多少個 
514      * @param value 值 
515      * @return 移除的個數 
516      */  
517     public long lRemove(String key,long count,Object value) {  
518         try {  
519             Long remove = redisTemplate.opsForList().remove(key, count, value);  
520             return remove;  
521         } catch (Exception e) {  
522             e.printStackTrace();  
523             return 0;  
524         }  
525     }  
526 }

5,新建 redis.properties 文件

注意文件位置,在咱們新建RedisConfig 的時候有指定 爲config/redis.properties ,因此咱們的redis.properties 文件位置以下圖所示

6,編寫redis.properties 文件內容

 1 #Matser的ip地址  
 2 redis.hostName=172.0.0.1
 3 #端口號  
 4 redis.port=6379
 5 #若是有密碼  
 6 redis.password=
 7 #客戶端超時時間單位是毫秒 默認是2000 
 8 redis.timeout=10000  
 9 
10 #最大空閒數  
11 redis.maxIdle=300  
12 #鏈接池的最大數據庫鏈接數。設爲0表示無限制,若是是jedis 2.4之後用redis.maxTotal  
13 #redis.maxActive=600  
14 #控制一個pool可分配多少個jedis實例,用來替換上面的redis.maxActive,若是是jedis 2.4之後用該屬性  
15 redis.maxTotal=1000  
16 #最大創建鏈接等待時間。若是超過此時間將接到異常。設爲-1表示無限制。  
17 redis.maxWaitMillis=1000  
18 #鏈接的最小空閒時間 默認1800000毫秒(30分鐘)  
19 redis.minEvictableIdleTimeMillis=300000  
20 #每次釋放鏈接的最大數目,默認3  
21 redis.numTestsPerEvictionRun=1024  
22 #逐出掃描的時間間隔(毫秒) 若是爲負數,則不運行逐出線程, 默認-1  
23 redis.timeBetweenEvictionRunsMillis=30000  
24 #是否在從池中取出鏈接前進行檢驗,若是檢驗失敗,則從池中去除鏈接並嘗試取出另外一個  
25 redis.testOnBorrow=true  
26 #在空閒時檢查有效性, 默認false  
27 redis.testWhileIdle=true  
28 
29 #redis集羣配置      
30 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:7006
31 spring.redis.cluster.max-redirects=3

7,編寫測試controller 

 1 package com.redis;
 2 
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.stereotype.Controller;
 5 import org.springframework.web.bind.annotation.PathVariable;
 6 import org.springframework.web.bind.annotation.RequestMapping;
 7 import org.springframework.web.bind.annotation.RequestMethod;
 8 import org.springframework.web.bind.annotation.ResponseBody;
 9  
10 @Controller
11 public class Firstblood {
12     
13     @Autowired
14     RedisUtil redisUtil;
15     
16     @RequestMapping(value="/FristBlood/{name}",method= RequestMethod.GET)
17     @ResponseBody
18     public String hello(@PathVariable("name") String name) {
19         return "查詢結果:" + redisUtil.get(name) ;
20     }
21 }

8,測試驗證

打開瀏覽器,輸入 「http://localhost:8080/FristBlood/redis」  這個url中的redis就等因而咱們本次請求要查詢的key ,

可是這塊有一個問題是,咱們使用了@ResponseBody 註解,可是咱們在redis數據庫中,以前存入的時候,咱們執行了一個命令"set redis jj" ,

雖然咱們認爲存入的是一個字符串可是在咱們代碼中執行獲取這個key的value的時候不會這麼認爲,會致使解析出錯。

這個時候咱們重新set一下,以下圖

而後在瀏覽器中咱們繼續輸入上面的url,返回的結果頁面以下,則說明整個工程ok

若是輸入的key不存在 則返回null,以下圖所示:

相關文章
相關標籤/搜索