黑马点评——商铺类型查询redis缓存作业—List和Str实现
·
结果预览:
List实现结果

Str实现结果
1、ShopTypeController改写
ShopTypeController中改写一下controller的方法逻辑,这里直接返回一个查询方法即可,后面在Service里再实现具体业务操作逻辑。

2、IShopTypeService接口改写
参考老师店铺Id查询,我在这里也写了一个方法,

3、ShopTypeServiceImpl具体写-List
实现类里写具体的操作逻辑,如下(CACHE_SHOP_TYPE_KEY = "cache:shopType:")。
后面写入数据是将JAVA对象转成一个一个的jsonstring,所以JSONUtil.toBean将json类型数据转成了 一个一个的对象(详细可见结果预览图)。
@Service
public class ShopTypeServiceImpl extends ServiceImpl<ShopTypeMapper, ShopType> implements IShopTypeService {
@Resource
private StringRedisTemplate stringRedisTemplate;
@Override
public Result queryTypeList() {
String key = CACHE_SHOP_TYPE_KEY;
//1、从redis中查询商铺类型
List<String> shopListJson = stringRedisTemplate.opsForList().range(key, 0, -1);
//2、判断,若存在,返回
if (CollectionUtil.isNotEmpty(shopListJson)) {
List<ShopType> shoplistJava = shopListJson.stream()
.map(JSON -> JSONUtil.toBean(JSON, ShopType.class))
.collect(Collectors.toList());
return Result.ok(shoplistJava);
}
//3、不存在,查询数据库
List<ShopType> shopTypesDB = query().orderByAsc("sort").list();
//4、若数据库中不存在,报错
if (CollectionUtil.isEmpty(shopTypesDB)) {
return Result.fail("店铺类型不存在");
}
//5、若存在,写入redis
List<String> shoptype2DB = shopTypesDB.stream()
.map(JSONUtil::toJsonStr)
.collect(Collectors.toList());
stringRedisTemplate.opsForList().rightPushAll(key, shoptype2DB);
//6、返回
return Result.ok(shoptype2DB);
}
}
4、ShopTypeServiceImpl具体写-Str
使用String类型的方法,则是将美食、KTV等商铺一整个作为list写入redis,,如下
@Service
public class ShopTypeServiceImpl extends ServiceImpl<ShopTypeMapper, ShopType> implements IShopTypeService {
@Resource
private StringRedisTemplate stringRedisTemplate;
@Override
public Result queryTypeList() {
//1、从redis中查询商铺类型
String shopListJson = stringRedisTemplate.opsForValue().get(CACHE_SHOP_TYPE_KEY);
//2、判断,若存在,返回
if (StrUtil.isNotBlank(shopListJson)) {
List<ShopType> shoplistJava = JSONUtil.toList(shopListJson, ShopType.class);
return Result.ok(shoplistJava);
}
//3、不存在,查询数据库
List<ShopType> shopTypesDB = query().orderByAsc("sort").list();
//4、若数据库中不存在,报错
if (CollectionUtil.isEmpty(shopTypesDB)) {
return Result.fail("店铺类型不存在");
}
//5、若存在,写入redis
String shoptype2DB = JSONUtil.toJsonStr(shopTypesDB);
stringRedisTemplate.opsForValue().set(CACHE_SHOP_TYPE_KEY, shoptype2DB);
//6、返回
return Result.ok(shoptype2DB);
}
参考:
黑马点评系列问题之P37商户点评缓存作业,用了string和list两种方法,可以直接复制粘贴_黑马点评作业-CSDN博客
更多推荐




所有评论(0)