简单实现Redis缓存

简单实现Redis缓存

这里以一个简单的实现网页分类数据的例子:
在这里插入图片描述
项目中有很多数据是稳定型数据,也就是不经常变化的,但可能处处需要用到,如果这样的数据查询经过优化,则可以大幅提高系统的效率,我们采用redis缓存分类数据,用以提高性能。
引入依赖:

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-data-redisartifactId>
dependency>

1.修改service实现(数据序列化成json缓存在redis):

@Override
public ResultInfo findAllCategory() {

    ObjectMapper objectMapper = new ObjectMapper();
    List<Category> categories = null;

    //判断是否有缓存,
    if (redisTemplate.hasKey("categories")) {
        //有则重置过期时间
        redisTemplate.expire("categories", 30, TimeUnit.MINUTES);
        try {
            //把取出的string还原成原始list集合
            categories = objectMapper.readValue(redisTemplate.opsForValue().get("categories"), new TypeReference<List<Category>>() {
            });
        } catch (IOException e) {
        }

    } else {
        String categoriesJson = null;
        try {
            //查询数据库
            categories = this.list();

            //转换jsonString
            categoriesJson = objectMapper.writeValueAsString(categories);
        } catch (JsonProcessingException  e) {
        }
        //把jsonString写入redis,设置过期时间,防止没有用还占内存
        this.redisTemplate.opsForValue().set("categories", categoriesJson, 30, TimeUnit.MINUTES);

    }
    return new ResultInfo(true, categories, null);
}

1.修改service实现(数据序列化成数组缓存在redis):

    @Override
    public ResultInfo findAllCategory() {
        //List list= this.categoryDao.findAllCategory();
        //1.先从redis缓存下判断是否有数据
        List<Category> list = redisTemplate.opsForList().range(categoryListKey, 0, -1);
        if (CollectionUtils.isEmpty(list)) {
            //没有,则从数据库查询,然后再存入redis下
            list = this.list();
            //存入redis下  redis下存入Category对象,那么类需要实现Serializable
            redisTemplate.opsForList().leftPushAll(categoryListKey, list);
        }
        return new ResultInfo(true, list, null);
    }

你可能感兴趣的:(Redis,redis,缓存,数据库,java)