(全网最全(求挑战))黑马点评 商户查询缓存练习; “P37 实战篇-商户查询缓存-03.缓存练习题分析”的String、List、ZSet(SortedSet)、Hash四种实现方法

博主看了黑马点评的“P37 实战篇-商户查询缓存-03.缓存练习题分析”作业,做了将近一天之后把四种类型的实现方法都实现了一遍,目前标榜是全网最全的作业解答,有更牛的大佬欢迎指正/挑战! 谢谢。

一、String型:

//      (1)↓~-用String类型,opsForValue缓存的
        String key = "Cache:TypeList:String";
        //@ZYL:先查找缓存
        String shopTypeJson = stringRedisTemplate.opsForValue().get(key);

        //@ZYL:缓存找到了就直接返回
        if (StrUtil.isNotBlank(shopTypeJson)) {
            List<ShopType> shopTypeList = JSONUtil.toList(shopTypeJson, ShopType.class);
            return shopTypeList;
        }

        //@ZYL:缓存找不到(隐含逻辑:if判断失败了,此处相当于else部分 ),再找数据库
        List<ShopType> shopTypeList = query().orderByAsc("sort").list();
        stringRedisTemplate.opsForValue().set(key,JSONUtil.toJsonStr(shopTypeList));

        return shopTypeList;

二、List型:

//      (2)↓~-用List类型,opsForList缓存的
        String key = "Cache:TypeList:List";
        //@ZYL:先查找缓存
        String shopTypeString = stringRedisTemplate.opsForList().leftPop(key);

        //@ZYL:缓存找到了就直接返回
        if (StrUtil.isNotBlank(shopTypeString)) {
            return JSONUtil.toList(shopTypeString,ShopType.class);
            //@ZYL:       ↑万*-JSONUtil.toList     !★
        }

        //@ZYL:缓存找不到(隐含逻辑:if判断失败了,此处相当于else部分 ),再找数据库
        List<ShopType> shopTypeList = query().orderByAsc("sort").list();
        stringRedisTemplate.opsForList().leftPush(key, JSONUtil.toJsonStr(shopTypeList));
        //@ZYL:                                               ↑万*-JSONUtil.toJsonStr     !★

        return shopTypeList;

三、ZSet(SortedSet)型:

//      (3)↓~-用ZSet类型,opsForzset缓存的
        String key = "Cache:TypeList:ZSet";
        //@ZYL:先查找缓存
        String shopTypeString = stringRedisTemplate.opsForZSet().randomMember(key);

        //@ZYL:缓存找到了就直接返回
        if (StrUtil.isNotBlank(shopTypeString)) {
            return JSONUtil.toList(shopTypeString,ShopType.class);
            //@ZYL:       ↑万*-JSONUtil.toList     !★
        }

        //@ZYL:缓存找不到(隐含逻辑:if判断失败了,此处相当于else部分 ),再找数据库
        List<ShopType> shopTypeList = query().orderByAsc("sort").list();
        stringRedisTemplate.opsForZSet().add(key, JSONUtil.toJsonStr(shopTypeList),0);
        //@ZYL:                                               ↑万*-JSONUtil.toJsonStr     !★

        return shopTypeList;

四、Hash型:

//      (4)↓~-用hash类型,opsForHash缓存的  //@ZYL:Hash的用Map转String的方法-试了一下,最终没成功,用String类型(JSON字符串)接收
//      Map类型,最终也不知道怎么把String类型再转为Map类型了(上网搜了几个方法API试了一下,没试成功);而这里的为用Object类型接收的    
        String key = "Cache:TypeList:Hash",hashKey="hashKey";
        //@ZYL:先查找缓存
        Object shopTypeObject = stringRedisTemplate.opsForHash().get(key,hashKey);
        if(shopTypeObject!=null) {
            String shopTypeString = shopTypeObject.toString();
            //@ZYL:缓存找到了就直接返回
            if (StrUtil.isNotBlank(shopTypeString)) {
                return JSONUtil.toList(shopTypeString, ShopType.class);
                //@ZYL:       ↑万*-JSONUtil.toList     !★
            }
        }
        
        //@ZYL:缓存找不到(隐含逻辑:if判断失败了,此处相当于else部分 ),再找数据库
        List<ShopType> shopTypeList = query().orderByAsc("sort").list();
        stringRedisTemplate.opsForHash().put(key,hashKey,JSONUtil.toJsonStr(shopTypeList));
        //@ZYL:                                               ↑万*-JSONUtil.toJsonStr     !★

        return shopTypeList;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值