spring Boot 项目中加入redis

集成redis

  • 新建springboot项目
  • 引入redis依赖:spring-boot-starter-data-redis
  • 配置文件中配置相关属性
pom.xml引入依赖

新建项目后,在pom.xml中引入redis依赖 spring-boot-starter-data-redis ,pom.xml完整依赖如下:

<dependencies>
    <!--Redis 依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <!-- web 依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.1</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
配置文件
spring:
  redis:
    port: 6379
    host: 127.0.0.1

springboot中提供了两个redis操作的api:RedisTemplate,StringRedisTemplate

使用StringRedisTemplate编写一个工具类
/**
 * @auther: chenmingyu
 * @date: 2018/11/11 12:04
 * @description: redis工具类
 */
@Component("redisUtils")
public class RedisUtils {

    @Resource
    private StringRedisTemplate stringRedisTemplate;

    /**
     * 获取key
     * @param key
     * @return
     */
    public String get(String key){
        try {
            if(StringUtils.isBlank(key)){
                return null;
            }
            return stringRedisTemplate.opsForValue().get(key);
        }catch (Exception e){
            System.out.println(String.format("获取字符串异常! key :%s",key));
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 设置key
     * @param key
     * @param value
     */
    public Boolean set(String key,String value){
        try {
            if(StringUtils.isBlank(key)||StringUtils.isBlank(value)){
                return false;
            }
            stringRedisTemplate.opsForValue().set(key,value);
            return true;
        }catch (Exception e){
            System.out.println(String.format("设置字符串异常! key :%s ,value:%s",key,value));
            e.printStackTrace();
        }
        return false;
    }
    /**
     * 删除key
     * @param key
     */
    public Boolean delete(String key){
        try {
            if(StringUtils.isBlank(key)){
                return false;
            }
            return stringRedisTemplate.delete(key);
        }catch (Exception e){
            System.out.println(String.format("删除key异常! key :%s ",key));
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 设置缓存,时间单位为秒
     * @param key
     * @param value
     * @param time
     * @return
     */
    public Boolean setEX(String key,String value,Long time){
        try {
            if(StringUtils.isBlank(key)||StringUtils.isBlank(value)){
                return false;
            }
            stringRedisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
            return true;
        }catch (Exception e){
            System.out.println(String.format("设置缓存异常! key :%s ,value:%s,times:%s",key));
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 获取key缓存时间,时间单位为秒
     * @param key
     * @return
     */
    public Long getExpireTime(String key){
        try {
            if(StringUtils.isBlank(key)){
                return null;
            }
            return stringRedisTemplate.getExpire(key,TimeUnit.SECONDS);
        }catch (Exception e){
            System.out.println(String.format("获取key缓存时间异常! key :%s",key));
            e.printStackTrace();
        }
        return null;
    }
}

StringRedisTemplate继承自RedisTemplate,StringRedisTemplate中的所有数据类型都是字符串类型,比如key,value,list,hash,set里存的元素都是字符串,与RedisTemplate不同的是StringRedisTemplate改变了序列化方式,StringRedisTemplate使用StringRedisSerializer序列化key,value,List,Hash,Set等数据结构中的元素。

使用junit测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootRedisApplicationTests {

    @Resource
    private RedisUtils redisUtils;


    @Test
    public void testSet() {
        Boolean flag = redisUtils.set("mingyu","mingyu");
        System.out.println("testSet:"+flag);
    }

    @Test
    public void testGet() {
        String value = redisUtils.get("mingyu");
        System.out.println("testGet:"+value);
    }

    @Test
    public void testDelete() {
        Boolean flag = redisUtils.delete("mingyu");
        System.out.println("testDelete:"+flag);
    }

    @Test
    public void testSetEX() {
        Boolean flag = redisUtils.setEX("mingyu","cmy",1000L);
        System.out.println("testSetEX:"+flag);
    }

    @Test
    public void testGetExpireTime() {
        Long time = redisUtils.getExpireTime("mingyu");
        System.out.println("testSetEX:"+time);
    }
}