黑马Redis课程小作业List缓存的实现
/**
* 用List实现
*
* @return
*/
@Override
public Result queryList() {
List<ShopType> typeList = new ArrayList<ShopType>();
//先查redis
Long size = stringRedisTemplate.opsForList().size(CACHE_SHOP_TYPE_KEY);
if (size != 0) {
//redis存在,直接返回
for (int i = 0; i < size; i++) {
String typeStr = stringRedisTemplate.opsForList().rightPopAndLeftPush(CACHE_SHOP_TYPE_KEY, CACHE_SHOP_TYPE_KEY);
ShopType type = JSONUtil.toBean(typeStr, ShopType.class);
typeList.add(type);
}
return Result.ok(typeList);
}
//redis没有,查db
typeList = query().orderByAsc("sort").list();
//如果db也没有,报错
if (CollectionUtils.isEmpty(typeList)) {
//缓存null ,防止穿透
stringRedisTemplate.opsForList().leftPush(CACHE_SHOP_TYPE_KEY, null);
stringRedisTemplate.expire(CACHE_SHOP_TYPE_KEY, CACHE_SHOP_TYPE_TTL, TimeUnit.MINUTES);
return Result.fail("商铺类型不存在!!");
}
//重新缓存
stringRedisTemplate.opsForList().leftPushAll(CACHE_SHOP_TYPE_KEY, typeList.stream().map(shopType -> JSONUtil.toJsonStr(shopType)).collect(Collectors.toList()));
stringRedisTemplate.expire(CACHE_SHOP_TYPE_KEY, CACHE_SHOP_TYPE_TTL, TimeUnit.MINUTES);
return Result.ok(typeList);
}
下一篇:
基于jsp+ssm的大学生兼职系统
