spring+redis的整合,使用spring-data-redis來整合

Biexiansheng發表於2018-12-20

1、參考:https://www.cnblogs.com/qlqwjy/p/8562703.html 

2、首先建立一個maven專案。然後加入依賴的jar包就行了。我加入的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/maven-v4_0_0.xsd">
  3   <modelVersion>4.0.0</modelVersion>
  4   <groupId>com.charts</groupId>
  5   <artifactId>com.fline.aic.charts</artifactId>
  6   <packaging>war</packaging>
  7   <version>0.0.1-SNAPSHOT</version>
  8   <name>com.fline.aic.charts Maven Webapp</name>
  9   <url>http://maven.apache.org</url>
 10   
 11   <dependencies>
 12     <dependency>
 13       <groupId>junit</groupId>
 14       <artifactId>junit</artifactId>
 15       <version>3.8.1</version>
 16       <scope>test</scope>
 17     </dependency>
 18     <!-- https://mvnrepository.com/artifact/log4j/log4j -->
 19     <dependency>
 20         <groupId>log4j</groupId>
 21         <artifactId>log4j</artifactId>
 22         <version>1.2.17</version>
 23     </dependency>
 24     <!-- https://mvnrepository.com/artifact/com.github.kstyrc/embedded-redis -->
 25     <dependency>
 26         <groupId>com.github.kstyrc</groupId>
 27         <artifactId>embedded-redis</artifactId>
 28         <version>0.6</version>
 29         <scope>test</scope>
 30     </dependency>
 31     <!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
 32     <dependency>
 33         <groupId>redis.clients</groupId>
 34         <artifactId>jedis</artifactId>
 35         <version>2.9.0</version>
 36     </dependency>
 37     <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-redis -->
 38     <dependency>
 39         <groupId>org.springframework.data</groupId>
 40         <artifactId>spring-data-redis</artifactId>
 41         <version>1.7.2.RELEASE</version>
 42     </dependency>
 43     <!-- https://mvnrepository.com/artifact/commons-pool/commons-pool -->
 44     <dependency>
 45         <groupId>commons-pool</groupId>
 46         <artifactId>commons-pool</artifactId>
 47         <version>1.5.4</version>
 48     </dependency>
 49     <dependency>
 50            <groupId>com.fasterxml.jackson.core</groupId>
 51            <artifactId>jackson-core</artifactId>
 52           <version>2.1.0</version>
 53    </dependency>
 54    <dependency>
 55            <groupId>com.fasterxml.jackson.core</groupId>
 56            <artifactId>jackson-databind</artifactId>
 57            <version>2.1.0</version>
 58    </dependency>
 59    <dependency>
 60            <groupId>com.fasterxml.jackson.core</groupId>
 61            <artifactId>jackson-annotations</artifactId>
 62            <version>2.1.0</version>
 63    </dependency>
 64     
 65     <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
 66     <dependency>
 67         <groupId>org.springframework</groupId>
 68         <artifactId>spring-core</artifactId>
 69         <version>4.3.18.RELEASE</version>
 70     </dependency>
 71     <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
 72     <dependency>
 73         <groupId>org.springframework</groupId>
 74         <artifactId>spring-context</artifactId>
 75         <version>4.3.18.RELEASE</version>
 76     </dependency>
 77     <!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
 78     <dependency>
 79         <groupId>org.springframework</groupId>
 80         <artifactId>spring-web</artifactId>
 81         <version>4.3.18.RELEASE</version>
 82     </dependency>
 83     <!-- https://mvnrepository.com/artifact/org.springframework/spring-aop -->
 84     <dependency>
 85         <groupId>org.springframework</groupId>
 86         <artifactId>spring-aop</artifactId>
 87         <version>4.3.18.RELEASE</version>
 88     </dependency>
 89     <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
 90     <dependency>
 91         <groupId>org.springframework</groupId>
 92         <artifactId>spring-webmvc</artifactId>
 93         <version>4.3.18.RELEASE</version>
 94     </dependency>
 95     <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
 96     <dependency>
 97         <groupId>org.springframework</groupId>
 98         <artifactId>spring-beans</artifactId>
 99         <version>4.3.18.RELEASE</version>
100     </dependency>
101     <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
102     <dependency>
103         <groupId>org.springframework</groupId>
104         <artifactId>spring-jdbc</artifactId>
105         <version>4.3.18.RELEASE</version>
106     </dependency>
107     <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
108     <dependency>
109         <groupId>org.springframework</groupId>
110         <artifactId>spring-webmvc</artifactId>
111         <version>4.3.18.RELEASE</version>
112     </dependency>
113     <!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
114     <dependency>
115         <groupId>org.springframework</groupId>
116         <artifactId>spring-test</artifactId>
117         <version>4.3.18.RELEASE</version>
118         <scope>test</scope>
119     </dependency>
120     <dependency>
121         <groupId>org.aspectj</groupId>
122         <artifactId>aspectjweaver</artifactId>
123         <version>1.8.13</version>
124     </dependency>
125     
126   </dependencies>
127   <build>
128     <finalName>com.fline.aic.charts</finalName>
129   </build>
130   
131   
132   
133 </project>

 3、然後在web.xml裡面配置一下Spring框架listener配置。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
 3   <display-name>Spring_Struts2_20170313</display-name>
 4   <welcome-file-list>
 5     <welcome-file>index.html</welcome-file>
 6     <welcome-file>index.htm</welcome-file>
 7     <welcome-file>index.jsp</welcome-file>
 8     <welcome-file>default.html</welcome-file>
 9     <welcome-file>default.htm</welcome-file>
10     <welcome-file>default.jsp</welcome-file>
11   </welcome-file-list>
12 
13   
14   <!-- 1:spring配置 ,在spring-framework-3.2.5.RELEASE\docs\spring-framework-reference\htmlsingle
15                              搜尋context-param找到下面這段話即可。記得就該param-value的值,如下所示;
16          2:param-value的值最好使用bean,這樣方便引用如/WEB-INF/classes/bean-*.xml   
17   -->
18   <context-param>
19     <param-name>contextConfigLocation</param-name>
20     <!-- <param-value>classpath:applicationContext.xml</param-value> -->
21     <param-value>/WEB-INF/applicationContext.xml</param-value>
22   </context-param>
23   <listener>
24     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
25   </listener>
26   
27   
28 </web-app>

4、然後配置一下Spring的配置檔案。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xmlns:p="http://www.springframework.org/schema/p"
 5     xmlns:context="http://www.springframework.org/schema/context"
 6     xsi:schemaLocation="
 7         http://www.springframework.org/schema/beans
 8         http://www.springframework.org/schema/beans/spring-beans.xsd
 9         http://www.springframework.org/schema/context
10         http://www.springframework.org/schema/context/spring-context.xsd">
11      
12     <!-- 開啟註解掃描 -->
13     <context:annotation-config/>   
14     <context:component-scan base-package="com.fline.*"></context:component-scan> 
15     
16     <!-- <import resource="classpath:applicationContext-redis.xml" />  -->
17     
18 </beans>

5、然後配置一下Redis的配置檔案redis.properties和applicationContext-redis.xml。

1 redis.host=127.0.0.1 
2 redis.port=6379
3 redis.password=123456
4 
5 redis.maxIdle=300
6 redis.maxActive=600
7 redis.maxWait=1000
8 redis.testOnBorrow=true
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3     xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"
 4     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
 5     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd ">
 6 
 7     <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig" >    
 8         <!--最大空閒數-->    
 9         <property name="maxIdle" value="10" />    
10         <!--連線池的最大資料庫連線數  -->  
11         <property name="maxTotal" value="50" />  
12         <!--最大建立連線等待時間-->    
13         <property name="maxWaitMillis" value="1500" />    
14         <!--逐出連線的最小空閒時間 預設1800000毫秒(30分鐘)-->  
15         <property name="minEvictableIdleTimeMillis" value="1800000" />   
16         <!--每次逐出檢查時 逐出的最大數目 如果為負數就是 : 1/abs(n), 預設3-->  
17         <property name="numTestsPerEvictionRun" value="1024" />   
18         <!--逐出掃描的時間間隔(毫秒) 如果為負數,則不執行逐出執行緒, 預設-1-->  
19         <property name="timeBetweenEvictionRunsMillis" value="30000" />   
20         <!--是否在從池中取出連線前進行檢驗,如果檢驗失敗,則從池中去除連線並嘗試取出另一個-->    
21         <property name="testOnBorrow" value="true" />    
22         <!--在空閒時檢查有效性, 預設false  -->  
23         <property name="testWhileIdle" value="true" />    
24     </bean >    
25       
26     <!--redis連線工廠 -->  
27     <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" destroy-method="destroy">   
28         <property name="poolConfig" ref="jedisPoolConfig"></property>   
29         <!--IP地址 -->  
30         <property name="hostName" value="127.0.0.1"></property>   
31         <!--埠號  -->  
32         <property name="port" value="6379"></property>   
33         <!--如果Redis設定有密碼  -->  
34         <property name="password" value="123456" />  
35         <!--客戶端超時時間單位是毫秒  -->  
36         <property name="timeout" value="1000"></property>   
37     </bean>    
38       
39     <!--redis操作模版,使用該物件可以操作redis  -->  
40     <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" >    
41         <property name="connectionFactory" ref="jedisConnectionFactory" />    
42         <!--如果不配置Serializer,那麼儲存的時候預設使用String,如果用User型別儲存,那麼會提示錯誤User can't cast to String!!  -->    
43         <property name="keySerializer" >    
44             <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />    
45         </property>    
46         <property name="valueSerializer" >    
47             <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer" />    
48         </property>    
49         <property name="hashKeySerializer">    
50             <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>    
51         </property>    
52         <property name="hashValueSerializer">    
53             <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"/>    
54         </property>    
55         <!--開啟事務  -->  
56         <property name="enableTransactionSupport" value="true"></property>  
57     </bean > 
58 
59     <bean id="redisUtil" class="com.fline.aic.utils.RedisUtil">
60         <property name="redisTemplate" ref="redisTemplate" />
61     </bean>
62 
63 </beans>

6、redis的工具類,可以直接拿到專案中使用的。

  1 package com.fline.aic.utils;
  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.beans.factory.annotation.Autowired;
  9 import org.springframework.data.redis.core.RedisTemplate;
 10 import org.springframework.stereotype.Component;
 11 import org.springframework.util.CollectionUtils;
 12 
 13 /**
 14  * 
 15  * @author QLQ 基於spring和redis的redisTemplate工具類 針對所有的hash 都是以h開頭的方法 針對所有的Set
 16  *         都是以s開頭的方法 不含通用方法 針對所有的List 都是以l開頭的方法
 17  */
 18 @Component // 交給Spring管理(在需要快取的地方自動注入即可使用)
 19 public class RedisUtil {
 20 
 21     @Autowired // (自動注入redisTemplet)
 22     private RedisTemplate<String, Object> redisTemplate;
 23 
 24     public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) {
 25         this.redisTemplate = redisTemplate;
 26     }
 27     // =============================common============================
 28 
 29     /**
 30      * 指定快取失效時間
 31      * 
 32      * @param key
 33      *            鍵
 34      * @param time
 35      *            時間(秒)
 36      * @return
 37      */
 38     public boolean expire(String key, long time) {
 39         try {
 40             if (time > 0) {
 41                 redisTemplate.expire(key, time, TimeUnit.SECONDS);
 42             }
 43             return true;
 44         } catch (Exception e) {
 45             e.printStackTrace();
 46             return false;
 47         }
 48     }
 49 
 50     /**
 51      * 根據key 獲取過期時間
 52      * 
 53      * @param key
 54      *            鍵 不能為null
 55      * @return 時間(秒) 返回0代表為永久有效
 56      */
 57     public long getExpire(String key) {
 58         return redisTemplate.getExpire(key, TimeUnit.SECONDS);
 59     }
 60 
 61     /**
 62      * 判斷key是否存在
 63      * 
 64      * @param key
 65      *            鍵
 66      * @return true 存在 false不存在
 67      */
 68     public boolean hasKey(String key) {
 69         try {
 70             return redisTemplate.hasKey(key);
 71         } catch (Exception e) {
 72             e.printStackTrace();
 73             return false;
 74         }
 75     }
 76 
 77     /**
 78      * 刪除快取
 79      * 
 80      * @param key
 81      *            可以傳一個值 或多個
 82      */
 83     @SuppressWarnings("unchecked")
 84     public void del(String... key) {
 85         if (key != null && key.length > 0) {
 86             if (key.length == 1) {
 87                 redisTemplate.delete(key[0]);
 88             } else {
 89                 redisTemplate.delete(CollectionUtils.arrayToList(key));
 90             }
 91         }
 92     }
 93 
 94     // ============================String=============================
 95     /**
 96      * 普通快取獲取
 97      * 
 98      * @param key
 99      *            鍵
100      * @return 值
101      */
102     public Object get(String key) {
103         return key == null ? null : redisTemplate.opsForValue().get(key);
104     }
105 
106     /**
107      * 普通快取放入
108      * 
109      * @param key
110      *            鍵
111      * @param value
112      *            值
113      * @return true成功 false失敗
114      */
115     public boolean set(String key, Object value) {
116         try {
117             redisTemplate.opsForValue().set(key, value);
118             return true;
119         } catch (Exception e) {
120             e.printStackTrace();
121             return false;
122         }
123 
124     }
125 
126     /**
127      * 普通快取放入並設定時間
128      * 
129      * @param key
130      *            鍵
131      * @param value
132      *            值
133      * @param time
134      *            時間(秒) time要大於0 如果time小於等於0 將設定無限期
135      * @return true成功 false 失敗
136      */
137     public boolean set(String key, Object value, long time) {
138         try {
139             if (time > 0) {
140                 redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
141             } else {
142                 set(key, value);
143             }
144             return true;
145         } catch (Exception e) {
146             e.printStackTrace();
147             return false;
148         }
149     }
150 
151     /**
152      * 遞增
153      * 
154      * @param key
155      *            鍵
156      * @param by
157      *            要增加幾(大於0)
158      * @return
159      */
160     public long incr(String key, long delta) {
161         if (delta < 0) {
162             throw new RuntimeException("遞增因子必須大於0");
163         }
164         return redisTemplate.opsForValue().increment(key, delta);
165     }
166 
167     /**
168      * 遞減
169      * 
170      * @param key
171      *            鍵
172      * @param by
173      *            要減少幾(小於0)
174      * @return
175      */
176     public long decr(String key, long delta) {
177         if (delta < 0) {
178             throw new RuntimeException("遞減因子必須大於0");
179         }
180         return redisTemplate.opsForValue().increment(key, -delta);
181     }
182 
183     // ================================Map=================================
184     /**
185      * HashGet
186      * 
187      * @param key
188      *            鍵 不能為null
189      * @param item
190      *            項 不能為null
191      * @return 值
192      */
193     public Object hget(String key, String item) {
194         return redisTemplate.opsForHash().get(key, item);
195     }
196 
197     /**
198      * 獲取hashKey對應的所有鍵值
199      * 
200      * @param key
201      *            鍵
202      * @return 對應的多個鍵值
203      */
204     public Map<Object, Object> hmget(String key) {
205         return redisTemplate.opsForHash().entries(key);
206     }
207 
208     /**
209      * HashSet
210      * 
211      * @param key
212      *            鍵
213      * @param map
214      *            對應多個鍵值
215      * @return true 成功 false 失敗
216      */
217     public boolean hmset(String key, Map<String, Object> map) {
218         try {
219             redisTemplate.opsForHash().putAll(key, map);
220             return true;
221         } catch (Exception e) {
222             e.printStackTrace();
223             return false;
224         }
225     }
226 
227     /**
228      * HashSet 並設定時間
229      * 
230      * @param key
231      *            鍵
232      * @param map
233      *            對應多個鍵值
234      * @param time
235      *            時間(秒)
236      * @return true成功 false失敗
237      */
238     public boolean hmset(String key, Map<String, Object> map, long time) {
239         try {
240             redisTemplate.opsForHash().putAll(key, map);
241             if (time > 0) {
242                 expire(key, time);
243             }
244             return true;
245         } catch (Exception e) {
246             e.printStackTrace();
247             return false;
248         }
249     }
250 
251     /**
252      * 向一張hash表中放入資料,如果不存在將建立
253      * 
254      * @param key
255      *            鍵
256      * @param item
257      *            項
258      * @param value
259      *            值
260      * @return true 成功 false失敗
261      */
262     public boolean hset(String key, String item, Object value) {
263         try {
264             redisTemplate.opsForHash().put(key, item, value);
265             return true;
266         } catch (Exception e) {
267             e.printStackTrace();
268             return false;
269         }
270     }
271 
272     /**
273      * 向一張hash表中放入資料,如果不存在將建立
274      * 
275      * @param key
276      *            鍵
277      * @param item
278      *            項
279      * @param value
280      *            值
281      * @param time
282      *            時間(秒) 注意:如果已存在的hash表有時間,這裡將會替換原有的時間
283      * @return true 成功 false失敗
284      */
285     public boolean hset(String key, String item, Object value, long time) {
286         try {
287             redisTemplate.opsForHash().put(key, item, value);
288             if (time > 0) {
289                 expire(key, time);
290             }
291             return true;
292         } catch (Exception e) {
293             e.printStackTrace();
294             return false;
295         }
296     }
297 
298     /**
299      * 刪除hash表中的值
300      * 
301      * @param key
302      *            鍵 不能為null
303      * @param item
304      *            項 可以使多個 不能為null
305      */
306     public void hdel(String key, Object... item) {
307         redisTemplate.opsForHash().delete(key, item);
308     }
309 
310     /**
311      * 判斷hash表中是否有該項的值
312      * 
313      * @param key
314      *            鍵 不能為null
315      * @param item
316      *            項 不能為null
317      * @return true 存在 false不存在
318      */
319     public boolean hHasKey(String key, String item) {
320         return redisTemplate.opsForHash().hasKey(key, item);
321     }
322 
323     /**
324      * hash遞增 如果不存在,就會建立一個 並把新增後的值返回
325      * 
326      * @param key
327      *            鍵
328      * @param item
329      *            項
330      * @param by
331      *            要增加幾(大於0)
332      * @return
333      */
334     public double hincr(String key, String item, double by) {
335         return redisTemplate.opsForHash().increment(key, item, by);
336     }
337 
338     /**
339      * hash遞減
340      * 
341      * @param key
342      *            鍵
343      * @param item
344      *            項
345      * @param by
346      *            要減少記(小於0)
347      * @return
348      */
349     public double hdecr(String key, String item, double by) {
350         return redisTemplate.opsForHash().increment(key, item, -by);
351     }
352 
353     // ============================set=============================
354     /**
355      * 根據key獲取Set中的所有值
356      * 
357      * @param key
358      *            鍵
359      * @return
360      */
361     public Set<Object> sGet(String key) {
362         try {
363             return redisTemplate.opsForSet().members(key);
364         } catch (Exception e) {
365             e.printStackTrace();
366             return null;
367         }
368     }
369 
370     /**
371      * 根據value從一個set中查詢,是否存在
372      * 
373      * @param key
374      *            鍵
375      * @param value
376      *            值
377      * @return true 存在 false不存在
378      */
379     public boolean sHasKey(String key, Object value) {
380         try {
381             return redisTemplate.opsForSet().isMember(key, value);
382         } catch (Exception e) {
383             e.printStackTrace();
384             return false;
385         }
386     }
387 
388     /**
389      * 將資料放入set快取
390      * 
391      * @param key
392      *            鍵
393      * @param values
394      *            值 可以是多個
395      * @return 成功個數
396      */
397     public long sSet(String key, Object... values) {
398         try {
399             return redisTemplate.opsForSet().add(key, values);
400         } catch (Exception e) {
401             e.printStackTrace();
402             return 0;
403         }
404     }
405 
406     /**
407      * 將set資料放入快取
408      * 
409      * @param key
410      *            鍵
411      * @param time
412      *            時間(秒)
413      * @param values
414      *            值 可以是多個
415      * @return 成功個數
416      */
417     public long sSetAndTime(String key, long time, Object... values) {
418         try {
419             Long count = redisTemplate.opsForSet().add(key, values);
420             if (time > 0)
421                 expire(key, time);
422             return count;
423         } catch (Exception e) {
424             e.printStackTrace();
425             return 0;
426         }
427     }
428 
429     /**
430      * 獲取set快取的長度
431      * 
432      * @param key
433      *            鍵
434      * @return
435      */
436     public long sGetSetSize(String key) {
437         try {
438             return redisTemplate.opsForSet().size(key);
439         } catch (Exception e) {
440             e.printStackTrace();
441             return 0;
442         }
443     }
444 
445     /**
446      * 移除值為value的
447      * 
448      * @param key
449      *            鍵
450      * @param values
451      *            值 可以是多個
452      * @return 移除的個數
453      */
454     public long setRemove(String key, Object... values) {
455         try {
456             Long count = redisTemplate.opsForSet().remove(key, values);
457             return count;
458         } catch (Exception e) {
459             e.printStackTrace();
460             return 0;
461         }
462     }
463     // ===============================list=================================
464 
465     /**
466      * 獲取list快取的內容
467      * 
468      * @param key
469      *            鍵
470      * @param start
471      *            開始
472      * @param end
473      *            結束 0 到 -1代表所有值
474      * @return
475      */
476     public List<Object> lGet(String key, long start, long end) {
477         try {
478             return redisTemplate.opsForList().range(key, start, end);
479         } catch (Exception e) {
480             e.printStackTrace();
481             return null;
482         }
483     }
484 
485     /**
486      * 獲取list快取的長度
487      * 
488      * @param key
489      *            鍵
490      * @return
491      */
492     public long lGetListSize(String key) {
493         try {
494             return redisTemplate.opsForList().size(key);
495         } catch (Exception e) {
496             e.printStackTrace();
497             return 0;
498         }
499     }
500 
501     /**
502      * 通過索引 獲取list中的值
503      * 
504      * @param key
505      *            鍵
506      * @param index
507      *            索引 index>=0時, 0 表頭,1 第二個元素,依次類推;index<0時,-1,表尾,-2倒數第二個元素,依次類推
508      * @return
509      */
510     public Object lGetIndex(String key, long index) {
511         try {
512             return redisTemplate.opsForList().index(key, index);
513         } catch (Exception e) {
514             e.printStackTrace();
515             return null;
516         }
517     }
518 
519     /**
520      * 將list放入快取
521      * 
522      * @param key
523      *            鍵
524      * @param value
525      *            值
526      * @param time
527      *            時間(秒)
528      * @return
529      */
530     public boolean lSet(String key, Object value) {
531         try {
532             redisTemplate.opsForList().rightPush(key, value);
533             return true;
534         } catch (Exception e) {
535             e.printStackTrace();
536             return false;
537         }
538     }
539 
540     /**
541      * 將list放入快取
542      * 
543      * @param key
544      *            鍵
545      * @param value
546      *            值
547      * @param time
548      *            時間(秒)
549      * @return
550      */
551     public boolean rSet(String key, Object value) {
552         try {
553             redisTemplate.opsForList().rightPush(key, value);
554             return true;
555         } catch (Exception e) {
556             e.printStackTrace();
557             return false;
558         }
559     }
560 
561     /**
562      * 將list放入快取
563      * 
564      * @param key
565      *            鍵
566      * @param value
567      *            值
568      * @param time
569      *            時間(秒)
570      * @return
571      */
572     public boolean lSet(String key, Object value, long time) {
573         try {
574             redisTemplate.opsForList().rightPush(key, value);
575             if (time > 0)
576                 expire(key, time);
577             return true;
578         } catch (Exception e) {
579             e.printStackTrace();
580             return false;
581         }
582     }
583 
584     /**
585      * 將list放入快取
586      * 
587      * @param key
588      *            鍵
589      * @param value
590      *            值
591      * @param time
592      *            時間(秒)
593      * @return
594      */
595     public boolean lSet(String key, List<Object> value) {
596         try {
597             redisTemplate.opsForList().rightPushAll(key, value);
598             return true;
599         } catch (Exception e) {
600             e.printStackTrace();
601             return false;
602         }
603     }
604 
605     /**
606      * 將list放入快取
607      * 
608      * @param key
609      *            鍵
610      * @param value
611      *            值
612      * @param time
613      *            時間(秒)
614      * @return
615      */
616     public boolean lSet(String key, List<Object> value, long time) {
617         try {
618             redisTemplate.opsForList().rightPushAll(key, value);
619             if (time > 0)
620                 expire(key, time);
621             return true;
622         } catch (Exception e) {
623             e.printStackTrace();
624             return false;
625         }
626     }
627 
628     /**
629      * 根據索引修改list中的某條資料
630      * 
631      * @param key
632      *            鍵
633      * @param index
634      *            索引
635      * @param value
636      *            值
637      * @return
638      */
639     public boolean lUpdateIndex(String key, long index, Object value) {
640         try {
641             redisTemplate.opsForList().set(key, index, value);
642             return true;
643         } catch (Exception e) {
644             e.printStackTrace();
645             return false;
646         }
647     }
648 
649     /**
650      * 移除N個值為value
651      * 
652      * @param key
653      *            鍵
654      * @param count
655      *            移除多少個
656      * @param value
657      *            值
658      * @return 移除的個數
659      */
660     public long lRemove(String key, long count, Object value) {
661         try {
662             Long remove = redisTemplate.opsForList().remove(key, count, value);
663             return remove;
664         } catch (Exception e) {
665             e.printStackTrace();
666             return 0;
667         }
668     }
669 
670 }

7、最後是Redis的測試類,方便自己進行測試使用。

 1 package com.fline.aic.utils;
 2 
 3 import java.util.List;
 4 import java.util.Map;
 5 import java.util.Map.Entry;
 6 import java.util.Set;
 7 
 8 import org.junit.Before;
 9 import org.junit.Test;
10 import org.springframework.context.ApplicationContext;
11 import org.springframework.context.support.ClassPathXmlApplicationContext;
12 
13 /**
14  * 
15  * @Description TODO
16  * @author biehl
17  * @Date 2018年12月7日 下午8:25:34
18  *
19  *       參考:https://www.cnblogs.com/qlqwjy/p/8562703.html
20  */
21 public class RedisTest {
22 
23     private RedisUtil redisUtils = null;
24 
25     @Before
26     public void before() {
27         ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext-redis.xml");
28         redisUtils = (RedisUtil) context.getBean("redisUtil");
29     }
30 
31     // redis存放String型別的
32     @Test
33     public void redisString() throws InterruptedException {
34         // 從redis資料庫中獲取到dd的字串
35         String str = (String) redisUtils.get("dd");
36         // 如果獲取到的str字串不為空
37         if (str != null) {
38             // 就刪除這個str字串
39             redisUtils.del(str);
40         }
41         // 將key為dd和value為dd設定到redis裡面
42         redisUtils.set("dd", "dd");
43         // 列印該key為dd的字串
44         System.out.println(redisUtils.get("dd"));
45     }
46 
47     // redis存放List型別的
48     @Test
49     public void redisList() throws InterruptedException {
50         // 刪除key為list1
51         redisUtils.del("list1");
52         redisUtils.lSet("list1", "list1");
53         redisUtils.lSet("list1", "list2");
54         redisUtils.lSet("list1", "list3");
55         redisUtils.rSet("list1", "list4");
56         List<Object> lGet = redisUtils.lGet("list1", 0, -1);
57         // redisTemplate.opsForList().range("myList", 0, -1);
58         for (Object s : lGet) {
59             System.out.println(s);
60         }
61     }
62 
63     // redis存放Set型別的
64     @Test
65     public void redisSet() throws InterruptedException {
66         redisUtils.del("set1");
67         redisUtils.sSet("set1", "set1");
68         redisUtils.sSet("set1", "set2");
69         redisUtils.sSet("set1", "set3");
70         redisUtils.sSet("set1", "set4");
71         Set<Object> sGet = redisUtils.sGet("set1");
72         for (Object s : sGet) {
73             System.out.println(s);
74         }
75     }
76 
77     // redis存放Hash型別的
78     @Test
79     public void redisHash() throws InterruptedException {
80         redisUtils.del("hash1");
81         redisUtils.hset("hash1", "beijing", "北京");
82         redisUtils.hset("hash1", "shanghai", "上海");
83         redisUtils.hset("hash1", "chenzhen", "深圳");
84         redisUtils.hset("hash1", "xinxiang", "新鄉");
85         Map<Object, Object> hmget = redisUtils.hmget("hash1");
86         Set<Entry<Object, Object>> entrySet = hmget.entrySet();
87         for (Map.Entry<Object, Object> hash : entrySet) {
88             System.out.println(hash.getKey() + " : " + hash.getValue());
89         }
90     }
91 
92 }

 效果如下所示:

 

待續.....

相關文章