redis查询数据读取缓存

````@GetMapping("/recommend")
    public BaseResponse<Page<User>> recommendUsers(long pageSize, long pageNum, HttpServletRequest request) {
        User loginUser = userService.getLoginUser(request);
        String redisKey = String.format("yupao:user:recommend:%s", loginUser.getId());
        ValueOperations<String, Object> valueOperations = redisTemplate.opsForValue();

        // 如果有缓存,直接读缓存
        Page<User> userPage = (Page<User>) valueOperations.get(redisKey);
        if (userPage != null) {
            return ResultUtils.success(userPage);//用ResultUtils封装
        }
        // 无缓存,查数据库
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        userPage = userService.page(new Page<>(pageNum, pageSize), queryWrapper);
        // 写缓存
        try {
            valueOperations.set(redisKey, userPage, 30000, TimeUnit.MILLISECONDS);
        } catch (Exception e) {
            log.error("redis set key error", e);
        }
        return ResultUtils.success(userPage);
    }
    
返回值需要用类似 `ResultUtils` 封装的情况通常出现在Web应用的后端开发中,这种封装的目的是为了统一API响应的格式,提高API的可维护性、可扩展性和可读性。以下是一些常见的情况,你可能需要封装API响应:
  1. 统一格式:通过使用一个统一的响应格式,可以使前端更容易解析和处理响应数据。这通常包括一个状态码、消息以及数据等字段。

  2. 异常处理:封装可以帮助处理异常情况,例如,如果发生错误,你可以将错误信息包含在响应中,而不是抛出未处理的异常。

  3. 业务逻辑:在响应中可以包含一些业务逻辑相关的信息,如成功或失败的标志,业务状态码等。

  4. 版本控制:如果API的版本发生了变化,封装可以更容易地适应这些变化,而不会影响到前端的调用。

  5. 安全性:响应封装可以帮助隐藏敏感信息,只向前端提供必要的数据,从而提高安全性。

  6. 可扩展性:封装可以使你更容易扩展API,例如,添加新的字段或元数据。

示例代码中的 ResultUtils.success(userPage) 可能是一个返回成功响应的示例,其中 userPage 是包含分页数据的对象,通过 ResultUtils 进行封装后,可以得到一个标准的成功响应格式,包含了分页数据。

总之,封装API响应通常有助于提高API的稳定性和可维护性,同时也使得前后端的协作更加顺畅。不过,并不是所有情况都需要封装响应,一些简单的API也可以直接返回原始数据。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吕昀hui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值