Redis-商品查询缓存01-添加商品缓存

  1. 1. 缓存模型和思路:
  2. 2. 代码如下:
  3. 3. 测试截图对比:

在我们查询商户信息时,我们是直接操作从数据库中去进行查询的,大致逻辑是这样,直接查询数据库那肯定慢咯,所以我们需要增加缓存

缓存模型和思路:

标准的操作方式就是查询数据库之前先查询缓存,如果缓存数据存在,则直接从缓存中返回,如果缓存数据不存在,再查询数据库,然后将数据存入redis。

代码如下:

代码思路:如果缓存有,则直接返回,如果缓存不存在,则查询数据库,然后存入redis。

ShopController.java

1
2
3
4
5
6
7
8
9
/**
* 根据id查询商铺信息
* @param id 商铺id
* @return 商铺详情数据
*/
@GetMapping("/{id}")
public Result queryShopById(@PathVariable("id") Long id) {
return shopService.queryById(id);
}

IShopService.java

1
2
3
4
public interface IShopService extends IService<Shop> {
Result queryById(Long id);
}

ShopServiceImpl.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@Service
public class ShopServiceImpl extends ServiceImpl<ShopMapper, Shop> implements IShopService {

@Resource
private StringRedisTemplate stringRedisTemplate;

@Override
public Result queryById(Long id) {
String key = CACHE_SHOP_KEY + id;
// 1. 从 redis 查询商铺缓存
String shopJson = stringRedisTemplate.opsForValue().get(key);
// 2. 判断 redis里是否存在
if (StrUtil.isNotBlank(shopJson)) {
// 3. 存在, 直接返回
Shop shop = JSONUtil.toBean(shopJson, Shop.class);
return Result.ok(shop);
}
// 4. 不存在,根据 id 查询数据库
Shop shop = getById(id);
// 5. 不存在,返回错误
if (shop==null) {
return Result.fail("店铺不存在!");
}
// 6. 数据库存在,写入redis(缓存)
stringRedisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(shop));
// 7. 返回
return Result.ok(shop);
}
}

测试截图对比:

第一次读取,

从图可以看出,存入缓存后读取的速度明显减少了