黑马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的大学生兼职系统