代码实现查询redis缓存

一、为redis缓存设计key

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

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

4、然后我们访问skuId为123的商品,看一下代码运行流程:
在这里插入图片描述
代码实现查询redis缓存_第3张图片

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

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

三、查询redis缓存存在数据

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

牛皮吧,这就是缓存服务器的魅力!三步解决!!!
代码实现查询redis缓存_第7张图片
代码实现查询redis缓存_第8张图片
代码如下:

@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;

}

你可能感兴趣的:(代码实现查询redis缓存)