黑马程序员Redis入门到实战教程,深度透析redis底层原理+redis分布式
P37-基于Redis缓存的商户类型列表查询
@Service
public class ShopTypeServiceImpl extends ServiceImpl<ShopTypeMapper, ShopType> implements IShopTypeService {
@Resource
StringRedisTemplate stringRedisTemplate;
@Override
public Result queryTypeList() {
String key = RedisConstants.SHOPTYPE_LIST_KEY;
List<String> listCache = stringRedisTemplate.opsForList().range(key, 0, -1);
// System.out.println(listCache);
if(listCache != null && !listCache.isEmpty()) {
// redis缓存中存在
// list<string> -> list<shoptype>
List<ShopType> shopTypes = listCache.stream()
.map(str -> (ShopType)JSONUtil.toBean(str, ShopType.class, true))
.sorted(Comparator.comparingInt(ShopType::getSort))
.collect(Collectors.toList());
return Result.ok(shopTypes);
}
// redis中不存在,查询数据库
List<ShopType> list = query().orderByAsc("sort").list();
if(list == null) {
// 数据库中不存在
return Result.fail("商户类型列表不存在!!");
}
// 数据库中存在,放入redis缓存并返回
// List<ShopType>转为List<String>存入redis
List<String> strList = list.stream().map(JSONUtil::toJsonStr).collect(Collectors.toList());
stringRedisTemplate.opsForList().leftPushAll(key,strList);
return Result.ok(list);
}
}

