Redis---------实现查询缓存

目录

数据库与缓存之间的工作业务逻辑:

接下来看查询缓存代码实现,主要是捋清楚业务逻辑,代码实现是死的:

Controller:

Service:

P37作业实现:总体逻辑跟上面的业务逻辑差不多

Controller:

Service:

总结


数据库与缓存之间的工作业务逻辑:

接下来看查询缓存代码实现,主要是捋清楚业务逻辑,代码实现是死的:

Controller:
java 复制代码
@RestController
@RequestMapping("/shop")
public class ShopController {

    @Resource
    public IShopService shopService;

    /**
     * 根据id查询商铺信息
     * @param id 商铺id
     * @return 商铺详情数据
     */
    @GetMapping("/{id}")
    public Result queryShopById(@PathVariable("id") Long id) {
        return shopService.queryById(id);
    }

}
Service:
java 复制代码
@Service
public class ShopServiceImpl extends ServiceImpl<ShopMapper, Shop> implements IShopService {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Override
    public Result queryById(Long id) {
        //1,根据id现在Redis缓存中查询数据
        String shopJson = stringRedisTemplate.opsForValue().get(CACHE_SHOP_KEY + "id");

        //2,如果命中就直接把结果返回就可以
        if (StrUtil.isNotBlank(shopJson)) {
            Shop shop = JSONUtil.toBean(shopJson, Shop.class);
            return Result.ok(shop);
        }

        //3,如果没命中就去数据库查询该数据
        Shop shop = getById(id);

        //4,如果数据库中也没查到就返回错误
        if(shop == null){
            return Result.fail("数据不存在!");
        }

        //5,如果查到了就先把该数据写到Redis中
        String toString = JSONUtil.toJsonStr(shop);
        stringRedisTemplate.opsForValue().set(CACHE_SHOP_KEY + "id",toString);

        //6,最后再把数据返回到前端
        return Result.ok(shop);
    }
}

P37作业实现:总体逻辑跟上面的业务逻辑差不多

Controller:
java 复制代码
@RestController
@RequestMapping("/shop-type")
public class ShopTypeController {
    @Resource
    private IShopTypeService typeService;

    @GetMapping("list")
    public Result queryTypeList() {

        return typeService.listType_list();
    }
}
Service:
java 复制代码
@Service
public class ShopTypeServiceImpl extends ServiceImpl<ShopTypeMapper, ShopType> implements IShopTypeService {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Override
    public Result listType_list() {
        //1,根据id现在Redis缓存中查询数据
        String shop_type_JSONS = stringRedisTemplate.opsForValue().get(CACHE_SHOP_TYPE_KEY+"TP");

        //2,如果命中就直接把结果返回就可以
        if (StrUtil.isNotBlank(shop_type_JSONS)) {
            //把字符串对象转换为List对象
            System.out.println("Redis中查到的数据:objects = " + JSONUtil.toList(shop_type_JSONS,ShopType.class));
            return Result.ok(JSONUtil.toList(shop_type_JSONS,ShopType.class));
        }

        //3,如果没命中就去数据库查询该数据
        List<ShopType> list = list();

        //4,如果数据库中也没查到就返回错误
        if(list == null){
            return Result.fail("404");
        }

        //5,如果查到了就先把该数据写到Redis中
        String s = JSONUtil.toJsonStr(list);//把List转换为JSON对象
        stringRedisTemplate.opsForValue().set(CACHE_SHOP_TYPE_KEY+"TP",s,30, TimeUnit.MINUTES);

        //6,最后再把数据返回到前端
        return Result.ok(list);
    }
}

总结

这种查询缓存是非常基础的,一定要理解他的逻辑处理顺序:①前端发送请求数据②根据前端需要进行查询数据业务③首先我们去Redis中查,看是否Redis中有该数据,如果命中就直接返回④如果没有命中,就去数据库中查询 ⑤数据库查询出来先判断是否查出来了数据,如果没有就直接返回错误⑥如果查出来有数据,就把该数据存到Redis中⑦最后再把该数据返回前端,这样下一次查询就可以直接在Redis中得到数据

相关推荐
nnerddboy1 小时前
Rust教程04:引用、借用与切片
开发语言·后端·rust
Rain的Java大神之路1 小时前
线上接口负载满了如何解决
java·数据库·redis·后端·缓存·面试·架构
counting money1 小时前
Tomcat 专题:从基础架构到性能调优与 WebSocket 实战
java·websocket·tomcat
xiaohaiAIgeo2 小时前
【2026年】HG/T 20656-2024化工暖通空调设计规范:新版标准的变化与影响
java·前端·javascript·科普知识
weixin_431600442 小时前
NestJS 入门(7):生命周期钩子——构造函数和 `OnModuleInit` 差在哪?
前端·后端·学习·node.js·nest.js
小强库计算机毕业设计2 小时前
基于 Spring Boot + Vue3 的校园管理系统
java·spring boot·后端·项目实战·管理系统·技术分享·校园管理系统实战
霸道流氓气质2 小时前
Java中信号量(Semaphore):从本地到分布式
java·开发语言·分布式
怪奇云呼军2 小时前
G.711、Opus 和重采样会拖慢识别吗?闪电智能VoiceAgent 的音频入口怎么选
java·人工智能·python·算法·云计算·音视频
编程令我快乐3 小时前
maven部分构建参数讲解
java·maven
ZC跨境爬虫3 小时前
LeetCode 27. 移除元素(双指针详解 + Java Python 多解法对比)
java·python·leetcode