Spring Boot整合Redis

1.新建Spring Boot项目

添加spring-boot-starter-data-redis依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

本文会根据StringRedisTemplate、RedisTemplate这两个模板来介绍,其中StringRedisTemplate继承自RedisTemplate,只能操作键值都是String类型的数据。在实际开发中建议使用RedisTemplate<K,V>。

查询源码可知RedisTemplate默认使用JdkSerializationRedisSerializer序列化,而StringRedisTemplate则使用StringRedisSerializer。

 

2.配置redis

 

########################################################
###Redis (RedisConfiguration)
########################################################
spring.redis.database=1
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=
spring.redis.pool.max-idle=8
spring.redis.pool.min-idle=0
spring.redis.pool.max-active=8
spring.redis.pool.max-wait=-1
spring.redis.timeout=5000

 

3.编写代码

 

 1 package com.haq.entity;
 2 
 3 import java.io.Serializable;
 4 
 5 /**
 6  * Created by on 2017/2/24.
 7  */
 8 public class User implements Serializable {
 9 
10     private static final long serialVersionUId = 1L;
11 
12     private String id;
13     private String name;
14 
15     public User(){
16         super();
17     }
18 
19     public String getId() {
20         return id;
21     }
22 
23     public void setId(String id) {
24         this.id = id;
25     }
26 
27     public String getName() {
28         return name;
29     }
30 
31     public void setName(String name) {
32         this.name = name;
33     }
34 
35     @Override
36     public String toString() {
37         return "User{" +
38                 "id='" + id + '\'' +
39                 ", name='" + name + '\'' +
40                 '}';
41     }
42 }

 

 2.创建RedisService

 

 1 package com.haq.common.redis;
 2 
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.data.redis.core.RedisTemplate;
 5 import org.springframework.data.redis.core.StringRedisTemplate;
 6 import org.springframework.data.redis.core.ValueOperations;
 7 import org.springframework.stereotype.Service;
 8 
 9 import javax.annotation.Resource;
10 
11 /**
12  * Created by on 2017/3/1.
13  */
14 @Service
15 public class RedisService {
16 
17     @Autowired
18     StringRedisTemplate stringRedisTemplate;
19 
20 
21     @Resource(name = "stringRedisTemplate")
22     ValueOperations<String, String> valOpsStr;
23 
24     @Autowired
25     RedisTemplate<Object, Object> redisTemplate;
26 
27     @Resource(name = "redisTemplate")
28     ValueOperations<Object, Object> valOpsObj;
29 
30     /**
31      * 根据指定key获取String
32      * @param key
33      * @return
34      */
35     public String getStr(String key){
36         return valOpsStr.get(key);
37     }
38 
39     /**
40      * 设置Str缓存
41      * @param key
42      * @param val
43      */
44     public void setStr(String key, String val){
45         valOpsStr.set(key,val);
46     }
47 
48     /**
49      * 删除指定key
50      * @param key
51      */
52     public void del(String key){
53         stringRedisTemplate.delete(key);
54     }
55 
56     /**
57      * 根据指定o获取Object
58      * @param o
59      * @return
60      */
61     public Object getObj(Object o){
62         return valOpsObj.get(o);
63     }
64 
65     /**
66      * 设置obj缓存
67      * @param o1
68      * @param o2
69      */
70     public void setObj(Object o1, Object o2){
71         valOpsObj.set(o1, o2);
72     }
73 
74     /**
75      * 删除Obj缓存
76      * @param o
77      */
78     public void delObj(Object o){
79         redisTemplate.delete(o);
80     }
81 
82 }

 

 3.创建RedisController

 

package com.haq.web;

import com.haq.common.redis.RedisService;
import com.haq.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * Created by on 2017/3/1.
 */
@RestController
@RequestMapping("/redis")
public class RedisController {

    @Autowired
    RedisService redisService;

    /**
     * 设置Str缓存
     * @param key
     * @param val
     * @return
     */
    @RequestMapping(value = "setStr")
    public String setStr(String key, String val){
        try {
            redisService.setStr(key, val);
            return "success";
        } catch (Exception e){
            e.printStackTrace();
            return "error";
        }
    }

    /**
     * 根据key查询Str缓存
     * @param key
     * @return
     */
    @RequestMapping(value = "getStr")
    public String getStr(String key){
        return redisService.getStr(key);
    }


    /**
     * 根据key产出Str缓存
     * @param key
     * @return
     */
    @RequestMapping(value = "delStr")
    public String delStr(String key){
        try {
            redisService.del(key);
            return "success";
        } catch (Exception e){
            return "error";
        }
    }


    /**
     * 设置obj缓存
     * @param key
     * @param user
     * @return
     */
    @RequestMapping(value = "setObj")
    public String setObj(String key, User user){
        try {
            redisService.setObj(key, user);
            return "success";
        } catch (Exception e){
            e.printStackTrace();
            return "error";
        }
    }

    /**
     * 获取obj缓存
     * @param key
     * @return
     */
    @RequestMapping(value = "getObj")
    public Object getObj(String key){
        return redisService.getObj(key);
    }


    /**
     * 删除obj缓存
     * @param key
     * @return
     */
    @RequestMapping(value = "delObj")
    public Object delObj(String key){
        try {
            redisService.delObj(key);
            return "success";
        } catch (Exception e){
            e.printStackTrace();
            return "error";
        }
    }

}

 

4.运行测试

1.StringRedisTemplate

http://127.0.0.1:8080/redis/setStr?key=aa&val=name

http://127.0.0.1:8080/redis/getStr?key=aa

http://127.0.0.1:8080/redis/delStr?key=aa

2.RedisTemplate

http://127.0.0.1:8080/redis/setObj?key=aa&id=1&name=test

http://127.0.0.1:8080/redis/getObj?key=aa

http://127.0.0.1:8080/redis/delObj?key=aa

以上地址都能通过测试,在这里就不一一截图了

 

后记

可以直接使用redistemplate来保存string类型,不过使用redis client看起来就不太直观,因为JdkSerializationRedisSerializer是使用二进制形式存储数据。

最后希望大家有问题能多多指教,O(∩_∩)O谢谢

 

posted @ 2018-03-15 09:32  汪强胜  Views(336)  Comments(0Edit  收藏  举报