RedisUtil寫法,好用


代碼:

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

配置文件寫法:

 1 #springboot整合redis相關配置
 2 spring:
 3   # 環境 dev|test|prod
 4   profiles:
 5     active: dev
 6   servlet:
 7     multipart:
 8       max-file-size: 100MB
 9       max-request-size: 100MB
10       enabled: true
11   redis:
12     database: 0           # Redis服務器數據庫
13     host: 192.168.1.202    # Redis服務器地址
14     port: 6379            # Redis服務器連接端口
15     password:      # Redis服務器連接密碼(默認為空)
16     timeout: 6000ms       # 連接超時時間(毫秒)
17     jedis:
18       pool:
19         max-active: 200   # 連接池最大連接數(使用負值表示沒有限制)
20         max-wait: -1      # 連接池最大阻塞等待時間(使用負值表示沒有限制)
21         max-idle: 10      # 連接池中的最大空閑連接
22         min-idle: 0       # 連接池中的最小空閑連接
RedisConfig 配置代碼:
 1 import org.springframework.context.annotation.Bean;
 2 import org.springframework.context.annotation.Configuration;
 3 import org.springframework.data.redis.connection.RedisConnectionFactory;
 4 import org.springframework.data.redis.core.RedisTemplate;
 5 import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
 6 import org.springframework.data.redis.serializer.StringRedisSerializer;
 7 import com.fasterxml.jackson.annotation.JsonAutoDetect;
 8 import com.fasterxml.jackson.annotation.PropertyAccessor;
 9 import com.fasterxml.jackson.databind.ObjectMapper;
10 
11 @Configuration
12 public class RedisConfig {
13 
14     @Bean
15     @SuppressWarnings("all")
16     public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
17 
18         RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
19 
20         template.setConnectionFactory(factory);
21 
22         Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
23 
24         ObjectMapper om = new ObjectMapper();
25 
26         om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
27 
28         om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
29 
30         jackson2JsonRedisSerializer.setObjectMapper(om);
31 
32         StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
33 
34         // key采用String的序列化方式
35 
36         template.setKeySerializer(stringRedisSerializer);
37 
38         // hash的key也采用String的序列化方式
39 
40         template.setHashKeySerializer(stringRedisSerializer);
41 
42         // value序列化方式采用jackson
43 
44         template.setValueSerializer(jackson2JsonRedisSerializer);
45 
46         // hash的value序列化方式采用jackson
47         template.setHashValueSerializer(jackson2JsonRedisSerializer);
48 
49         template.afterPropertiesSet();
50 
51         return template;
52 
53     }
54 
55 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM