代码实现查询redis缓存

一、为redis缓存设计key

1、如何设计这个key是关键,这里查询的是json字符串
在这里插入图片描述
2、使用客户端连接redis服务器redis-cli -h 172.25.0.11 -p 6379
3、keys * 查看所有的key(json字符串),这里只存了skuId为122的商品
在这里插入图片描述

二、查询redis缓存为空时,再去数据库查询

4、然后我们访问skuId为123的商品,看一下代码运行流程:
在这里插入图片描述
在这里插入图片描述

(1)后端接收到了前端的请求skuId为123,把它包装成key
(2)先拿着这个key去redis服务器查询,返回为null
(3)再查询MySQL数据库,查询到了,不为空,返回对象数据
(4)再把这个java对象数据转为json字符串,并存到redis服务器中
(5)最后把这个对象数据返回给前端

在这里插入图片描述
在redis服务器就可以查询到刚存过来的json字符串(skuId为123的商品信息)
在这里插入图片描述
运行一下这个命令:get sku:123:info,查看存放的信息,注意这里的中文转成了URLencode编码
在这里插入图片描述

三、查询redis缓存存在数据

5、既然skuId为123的商品信息存到了redis缓存服务器上,那么现在访问skuId为123的商品,再看一下这个流程:
(1)后端接收到了前端请求连接skuId为123
(2)先查询redis缓存服务器,查询到了,返回结果json字符串
(3)把这个json字符串 转为java对象,直接返回给前端

牛皮吧,这就是缓存服务器的魅力!三步解决!!!
在这里插入图片描述
在这里插入图片描述
代码如下:

@Override
//用户购买商品页面:查看sku商品,sku图片集合
public PmsSkuInfo getSkuById(String skuId) {

    PmsSkuInfo pmsSkuInfo = new PmsSkuInfo();

    //连接缓存
    Jedis jedis = redisUtil.getJedis();

    //查询缓存
    String skuKey = "sku:"+skuId+":info";
    String skuJson = jedis.get(skuKey);   //根据skuId到redis缓存查询得到一个json的字符串

    if(StringUtils.isNotBlank(skuJson)) {   //如果不等于空,即是可以在缓存查到
        pmsSkuInfo = JSON.parseObject(skuJson,PmsSkuInfo.class);  //把查询到的json字符串 转为 java对象
    }else {
        //如果缓存没有,就查询mysql
        pmsSkuInfo = getSkuByIdFromDb(skuId);
        if(pmsSkuInfo!=null) {
            //mysql查询结果存入redis
            jedis.set("sku:"+skuId+":info", JSON.toJSONString(pmsSkuInfo));    //把java对象 转为 json字符串

        }
    }
    jedis.close();   //关闭缓存连接
    return pmsSkuInfo;
}


//用户购买商品页面:查看sku商品,sku图片集合
public PmsSkuInfo getSkuByIdFromDb(String skuId) {

    //根据skuId获得sku商品信息
    PmsSkuInfo pmsSkuInfo = new PmsSkuInfo();
    pmsSkuInfo.setId(skuId);
    PmsSkuInfo skuInfo = pmsSkuInfoMapper.selectOne(pmsSkuInfo);

    //根据skuId获得sku商品图片的集合
    PmsSkuImage pmsSkuImage = new PmsSkuImage();
    pmsSkuImage.setSkuId(skuId);
    skuInfo.setSkuImageList(pmsSkuImageMapper.select(pmsSkuImage));

    return skuInfo;

}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值