02:SpringBoot2 整合 Redis 详细步骤

发布时间 2023-07-30 15:36:36作者: wuzx-blog

1、pom文件中添加redis引用

1         <dependency>
2             <groupId>org.springframework.boot</groupId>
3             <artifactId>spring-boot-starter-web</artifactId>
4         </dependency>
5         <dependency>
6             <groupId>org.springframework.boot</groupId>
7             <artifactId>spring-boot-starter-data-redis</artifactId>
8         </dependency>

2、配置application.properties

 1 server.port=8080
 2 
 3 spring.redis.host=127.0.0.1
 4 spring.redis.port=6379
 5 spring.redis.database=0
 6 spring.redis.password=
 7 spring.redis.timeout=6000
 8 spring.redis.lettuce.pool.max-active=8
 9 spring.redis.lettuce.pool.min-idle=0
10 spring.redis.lettuce.pool.max-idle=8
11 spring.redis.lettuce.pool.max-wait=-1

启动类

 1 package com.atguigu.boot00testredis;
 2 
 3 import org.springframework.boot.SpringApplication;
 4 import org.springframework.boot.autoconfigure.SpringBootApplication;
 5 
 6 @SpringBootApplication
 7 public class TestRedisApplication {
 8 
 9     public static void main(String[] args) {
10         SpringApplication.run(TestRedisApplication.class, args);
11     }
12 
13 }

 

3、写测试类直接调用Redis

 1 package com.atguigu.boot00testredis;
 2 
 3 import org.junit.jupiter.api.Test;
 4 import org.springframework.beans.factory.annotation.Autowired;
 5 import org.springframework.boot.test.context.SpringBootTest;
 6 import org.springframework.data.redis.core.StringRedisTemplate;
 7 
 8 import java.util.concurrent.TimeUnit;
 9 
10 @SpringBootTest
11 class Boot00TestRedisApplicationTests {
12 
13     @Autowired
14     private StringRedisTemplate stringRedisTemplate;
15 
16     @Test
17     void contextLoads() {
18         System.out.println("redis");
19         stringRedisTemplate.opsForValue().set("c","ccc",60, TimeUnit.SECONDS);
20         System.out.println(stringRedisTemplate.opsForValue().get("c"));
21     }
22 
23 }

运行结果:

 

4、添加redis工具类

  1 package com.atguigu.boot00testredis.utils;
  2 
  3 import org.springframework.beans.factory.annotation.Autowired;
  4 import org.springframework.data.redis.core.RedisTemplate;
  5 import org.springframework.stereotype.Component;
  6 
  7 import java.util.List;
  8 import java.util.Map;
  9 import java.util.Set;
 10 import java.util.concurrent.TimeUnit;
 11 
 12 @Component
 13 public class RedisUtil {
 14 
 15     @Autowired
 16     private RedisTemplate redisTemplate;
 17     /**
 18      * 给一个指定的 key 值附加过期时间
 19      *
 20      * @param key
 21      * @param time
 22      * @return
 23      */
 24     public boolean expire(String key, long time) {
 25         return redisTemplate.expire(key, time, TimeUnit.SECONDS);
 26     }
 27     /**
 28      * 根据key 获取过期时间
 29      *
 30      * @param key
 31      * @return
 32      */
 33     public long getTime(String key) {
 34         return redisTemplate.getExpire(key, TimeUnit.SECONDS);
 35     }
 36     /**
 37      * 根据key 获取过期时间
 38      *
 39      * @param key
 40      * @return
 41      */
 42     public boolean hasKey(String key) {
 43         return redisTemplate.hasKey(key);
 44     }
 45     /**
 46      * 移除指定key 的过期时间
 47      *
 48      * @param key
 49      * @return
 50      */
 51     public boolean persist(String key) {
 52         return redisTemplate.boundValueOps(key).persist();
 53     }
 54 
 55     //- - - - - - - - - - - - - - - - - - - - -  String类型 - - - - - - - - - - - - - - - - - - - -
 56 
 57     /**
 58      * 根据key获取值
 59      *
 60      * @param key 键
 61      * @return 62      */
 63     public Object get(String key) {
 64         return key == null ? null : redisTemplate.opsForValue().get(key);
 65     }
 66 
 67     /**
 68      * 将值放入缓存
 69      *
 70      * @param key   键
 71      * @param value 值
 72      * @return true成功 false 失败
 73      */
 74     public void set(String key, String value) {
 75         redisTemplate.opsForValue().set(key, value);
 76     }
 77 
 78     /**
 79      * 将值放入缓存并设置时间
 80      *
 81      * @param key   键
 82      * @param value 值
 83      * @param time  时间(秒) -1为无期限
 84      * @return true成功 false 失败
 85      */
 86     public void set(String key, String value, long time) {
 87         if (time > 0) {
 88             redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
 89         } else {
 90             redisTemplate.opsForValue().set(key, value);
 91         }
 92     }
 93 
 94     /**
 95      * 批量添加 key (重复的键会覆盖)
 96      *
 97      * @param keyAndValue
 98      */
 99     public void batchSet(Map<String, String> keyAndValue) {
100         redisTemplate.opsForValue().multiSet(keyAndValue);
101     }
102 
103     /**
104      * 批量添加 key-value 只有在键不存在时,才添加
105      * map 中只要有一个key存在,则全部不添加
106      *
107      * @param keyAndValue
108      */
109     public void batchSetIfAbsent(Map<String, String> keyAndValue) {
110         redisTemplate.opsForValue().multiSetIfAbsent(keyAndValue);
111     }
112 
113     /**
114      * 对一个 key-value 的值进行加减操作,
115      * 如果该 key 不存在 将创建一个key 并赋值该 number
116      * 如果 key 存在,但 value 不是长整型 ,将报错
117      *
118      * @param key
119      * @param number
120      */
121     public Long increment(String key, long number) {
122         return redisTemplate.opsForValue().increment(key, number);
123     }
124 
125     /**
126      * 对一个 key-value 的值进行加减操作,
127      * 如果该 key 不存在 将创建一个key 并赋值该 number
128      * 如果 key 存在,但 value 不是 纯数字 ,将报错
129      *
130      * @param key
131      * @param number
132      */
133     public Double increment(String key, double number) {
134         return redisTemplate.opsForValue().increment(key, number);
135     }
136 
137     //- - - - - - - - - - - - - - - - - - - - -  set类型 - - - - - - - - - - - - - - - - - - - -
138 
139     /**
140      * 将数据放入set缓存
141      *
142      * @param key 键
143      * @return
144      */
145     public void sSet(String key, String value) {
146         redisTemplate.opsForSet().add(key, value);
147     }
148 
149     /**
150      * 获取变量中的值
151      *
152      * @param key 键
153      * @return
154      */
155     public Set<Object> members(String key) {
156         return redisTemplate.opsForSet().members(key);
157     }
158 
159     /**
160      * 随机获取变量中指定个数的元素
161      *
162      * @param key   键
163      * @param count 值
164      * @return
165      */
166     public void randomMembers(String key, long count) {
167         redisTemplate.opsForSet().randomMembers(key, count);
168     }
169 
170     /**
171      * 随机获取变量中的元素
172      *
173      * @param key 键
174      * @return
175      */
176     public Object randomMember(String key) {
177         return redisTemplate.opsForSet().randomMember(key);
178     }
179 
180     /**
181      * 弹出变量中的元素
182      *
183      * @param key 键
184      * @return
185      */
186     public Object pop(String key) {
187         return redisTemplate.opsForSet().pop("setValue");
188     }
189 
190     /**
191      * 获取变量中值的长度
192      *
193      * @param key 键
194      * @return
195      */
196     public long size(String key) {
197         return redisTemplate.opsForSet().size(key);
198     }
199 
200     /**
201      * 根据value从一个set中查询,是否存在
202      *
203      * @param key   键
204      * @param value 值
205      * @return true 存在 false不存在
206      */
207     public boolean sHasKey(String key, Object value) {
208         return redisTemplate.opsForSet().isMember(key, value);
209     }
210 
211     /**
212      * 检查给定的元素是否在变量中。
213      *
214      * @param key 键
215      * @param obj 元素对象
216      * @return
217      */
218     public boolean isMember(String key, Object obj) {
219         return redisTemplate.opsForSet().isMember(key, obj);
220     }
221 
222     /**
223      * 转移变量的元素值到目的变量。
224      *
225      * @param key     键
226      * @param value   元素对象
227      * @param destKey 元素对象
228      * @return
229      */
230     public boolean move(String key, String value, String destKey) {
231         return redisTemplate.opsForSet().move(key, value, destKey);
232     }
233 
234     /**
235      * 批量移除set缓存中元素
236      *
237      * @param key    键
238      * @param values 值
239      * @return
240      */
241     public void remove(String key, Object... values) {
242         redisTemplate.opsForSet().remove(key, values);
243     }
244 
245     /**
246      * 通过给定的key求2个set变量的差值
247      *
248      * @param key     键
249      * @param destKey 键
250      * @return
251      */
252     public Set<Set> difference(String key, String destKey) {
253         return redisTemplate.opsForSet().difference(key, destKey);
254     }
255 
256 
257     //- - - - - - - - - - - - - - - - - - - - -  hash类型 - - - - - - - - - - - - - - - - - - - -
258 
259     /**
260      * 加入缓存
261      *
262      * @param key 键
263      * @param map 键
264      * @return
265      */
266     public void add(String key, Map<String, String> map) {
267         redisTemplate.opsForHash().putAll(key, map);
268     }
269 
270     /**
271      * 获取 key 下的 所有  hashkey 和 value
272      *
273      * @param key 键
274      * @return
275      */
276     public Map<Object, Object> getHashEntries(String key) {
277         return redisTemplate.opsForHash().entries(key);
278     }
279 
280     /**
281      * 验证指定 key 下 有没有指定的 hashkey
282      *
283      * @param key
284      * @param hashKey
285      * @return
286      */
287     public boolean hashKey(String key, String hashKey) {
288         return redisTemplate.opsForHash().hasKey(key, hashKey);
289     }
290 
291     /**
292      * 获取指定key的值string
293      *
294      * @param key  键
295      * @param key2 键
296      * @return
297      */
298     public String getMapString(String key, String key2) {
299         return redisTemplate.opsForHash().get("map1", "key1").toString();
300     }
301 
302     /**
303      * 获取指定的值Int
304      *
305      * @param key  键
306      * @param key2 键
307      * @return
308      */
309     public Integer getMapInt(String key, String key2) {
310         return (Integer) redisTemplate.opsForHash().get("map1", "key1");
311     }
312 
313     /**
314      * 弹出元素并删除
315      *
316      * @param key 键
317      * @return
318      */
319     public String popValue(String key) {
320         return redisTemplate.opsForSet().pop(key).toString();
321     }
322 
323     /**
324      * 删除指定 hash 的 HashKey
325      *
326      * @param key
327      * @param hashKeys
328      * @return 删除成功的 数量
329      */
330     public Long delete(String key, String... hashKeys) {
331         return redisTemplate.opsForHash().delete(key, hashKeys);
332     }
333 
334     /**
335      * 给指定 hash 的 hashkey 做增减操作
336      *
337      * @param key
338      * @param hashKey
339      * @param number
340      * @return
341      */
342     public Long increment(String key, String hashKey, long number) {
343         return redisTemplate.opsForHash().increment(key, hashKey, number);
344     }
345 
346     /**
347      * 给指定 hash 的 hashkey 做增减操作
348      *
349      * @param key
350      * @param hashKey
351      * @param number
352      * @return
353      */
354     public Double increment(String key, String hashKey, Double number) {
355         return redisTemplate.opsForHash().increment(key, hashKey, number);
356     }
357 
358     /**
359      * 获取 key 下的 所有 hashkey 字段
360      *
361      * @param key
362      * @return
363      */
364     public Set<Object> hashKeys(String key) {
365         return redisTemplate.opsForHash().keys(key);
366     }
367 
368     /**
369      * 获取指定 hash 下面的 键值对 数量
370      *
371      * @param key
372      * @return
373      */
374     public Long hashSize(String key) {
375         return redisTemplate.opsForHash().size(key);
376     }
377 
378     //- - - - - - - - - - - - - - - - - - - - -  list类型 - - - - - - - - - - - - - - - - - - - -
379 
380     /**
381      * 在变量左边添加元素值
382      *
383      * @param key
384      * @param value
385      * @return
386      */
387     public void leftPush(String key, Object value) {
388         redisTemplate.opsForList().leftPush(key, value);
389     }
390 
391     /**
392      * 获取集合指定位置的值。
393      *
394      * @param key
395      * @param index
396      * @return
397      */
398     public Object index(String key, long index) {
399         return redisTemplate.opsForList().index("list", 1);
400     }
401 
402     /**
403      * 获取指定区间的值。
404      *
405      * @param key
406      * @param start
407      * @param end
408      * @return
409      */
410     public List<Object> range(String key, long start, long end) {
411         return redisTemplate.opsForList().range(key, start, end);
412     }
413 
414     /**
415      * 把最后一个参数值放到指定集合的第一个出现中间参数的前面,
416      * 如果中间参数值存在的话。
417      *
418      * @param key
419      * @param pivot
420      * @param value
421      * @return
422      */
423     public void leftPush(String key, String pivot, String value) {
424         redisTemplate.opsForList().leftPush(key, pivot, value);
425     }
426 
427     /**
428      * 向左边批量添加参数元素。
429      *
430      * @param key
431      * @param values
432      * @return
433      */
434     public void leftPushAll(String key, String... values) {
435 //        redisTemplate.opsForList().leftPushAll(key,"w","x","y");
436         redisTemplate.opsForList().leftPushAll(key, values);
437     }
438 
439     /**
440      * 向集合最右边添加元素。
441      *
442      * @param key
443      * @param value
444      * @return
445      */
446     public void leftPushAll(String key, String value) {
447         redisTemplate.opsForList().rightPush(key, value);
448     }
449 
450     /**
451      * 向左边批量添加参数元素。
452      *
453      * @param key
454      * @param values
455      * @return
456      */
457     public void rightPushAll(String key, String... values) {
458         //redisTemplate.opsForList().leftPushAll(key,"w","x","y");
459         redisTemplate.opsForList().rightPushAll(key, values);
460     }
461 
462     /**
463      * 向已存在的集合中添加元素。
464      *
465      * @param key
466      * @param value
467      * @return
468      */
469     public void rightPushIfPresent(String key, Object value) {
470         redisTemplate.opsForList().rightPushIfPresent(key, value);
471     }
472 
473     /**
474      * 向已存在的集合中添加元素。
475      *
476      * @param key
477      * @return
478      */
479     public long listLength(String key) {
480         return redisTemplate.opsForList().size(key);
481     }
482 
483     /**
484      * 移除集合中的左边第一个元素。
485      *
486      * @param key
487      * @return
488      */
489     public void leftPop(String key) {
490         redisTemplate.opsForList().leftPop(key);
491     }
492 
493     /**
494      * 移除集合中左边的元素在等待的时间里,如果超过等待的时间仍没有元素则退出。
495      *
496      * @param key
497      * @return
498      */
499     public void leftPop(String key, long timeout, TimeUnit unit) {
500         redisTemplate.opsForList().leftPop(key, timeout, unit);
501     }
502 
503     /**
504      * 移除集合中右边的元素。
505      *
506      * @param key
507      * @return
508      */
509     public void rightPop(String key) {
510         redisTemplate.opsForList().rightPop(key);
511     }
512 
513     /**
514      * 移除集合中右边的元素在等待的时间里,如果超过等待的时间仍没有元素则退出。
515      *
516      * @param key
517      * @return
518      */
519     public void rightPop(String key, long timeout, TimeUnit unit) {
520         redisTemplate.opsForList().rightPop(key, timeout, unit);
521     }
522 }

 

5、写Controller方法

 1 package com.atguigu.boot00testredis.controller;
 2 
 3 import com.atguigu.boot00testredis.utils.RedisUtil;
 4 import org.springframework.beans.factory.annotation.Autowired;
 5 import org.springframework.web.bind.annotation.GetMapping;
 6 import org.springframework.web.bind.annotation.PathVariable;
 7 import org.springframework.web.bind.annotation.RequestMapping;
 8 import org.springframework.web.bind.annotation.RestController;
 9 
10 @RestController
11 @RequestMapping("/hello")
12 public class HelloController
13 {
14     /**
15      * 注入redis工具类
16      */
17     @Autowired
18     private RedisUtil redisUtil;
19 
20     @GetMapping("/hi/{name}")
21     public String hi(@PathVariable("name") String name)
22     {
23         System.out.println("name="+name);
24 
25         if(redisUtil.get(name)!=null)
26         {
27             return redisUtil.get(name).toString();
28         }
29         else {
30             redisUtil.set(name,"My name is "+name+"!",60);
31 
32             return redisUtil.get(name).toString();
33         }
34     }
35 }

调用结果: