首先将ShopTypeController类中的方法修改一下
package com.hmdp.controller;
import com.hmdp.dto.Result;
import com.hmdp.entity.ShopType;
import com.hmdp.service.IShopTypeService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("/shop-type")
public class ShopTypeController {
@Resource
private IShopTypeService typeService;
// public Result queryTypeList() {
// List<ShopType> typeList = typeService
// .query().orderByAsc("sort").list();
// return Result.ok(typeList);
// }
@GetMapping("list")
public Result queryTypeList() {
return typeService.queryTypeLists();
}
}
IShopTypeService实现类
package com.hmdp.service;
import com.hmdp.dto.Result;
import com.hmdp.entity.ShopType;
import com.baomidou.mybatisplus.extension.service.IService;
public interface IShopTypeService extends IService<ShopType> {
Result queryTypeLists();
}
ShopTypeServiceImpl实现类
package com.hmdp.service.impl;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.hmdp.dto.Result;
import com.hmdp.entity.ShopType;
import com.hmdp.mapper.ShopTypeMapper;
import com.hmdp.service.IShopTypeService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hmdp.utils.RedisConstants;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class ShopTypeServiceImpl extends ServiceImpl<ShopTypeMapper, ShopType> implements IShopTypeService {
@Resource
private StringRedisTemplate stringRedisTemplate;
@Override
public Result queryTypeLists() {
//获取radis中商户
String shopType=stringRedisTemplate.opsForValue().get("shopType");
if (StrUtil.isNotBlank(shopType)) {
//存在,直接返回
List<ShopType> shopTypes = JSONUtil.toList(shopType, ShopType.class);
return Result.ok(shopTypes);
}
//不存在,从数据库中查询写入redis
List<ShopType> shopTypes = query().orderByAsc("sort").list();
//不存在,返回错误
if (shopTypes == null) {
return Result.fail("分类不存在");
}
//将查询到的信息存入radis
stringRedisTemplate.opsForValue().set("shopType",JSONUtil.toJsonStr(shopTypes));
//返回
return Result.ok(shopTypes);
}
}
通过第一次运行,未缓存,获取时间比较长
此时看客户端,shopType已经缓存到redis中
再次刷新可以看到,时间明显减少,缓存成功