在我们查询商户信息时,我们是直接操作从数据库中去进行查询的,大致逻辑是这样,直接查询数据库那肯定慢咯,所以我们需要增加缓存
缓存模型和思路:
标准的操作方式就是查询数据库之前先查询缓存,如果缓存数据存在,则直接从缓存中返回,如果缓存数据不存在,再查询数据库,然后将数据存入redis。
代码如下:
代码思路:如果缓存有,则直接返回,如果缓存不存在,则查询数据库,然后存入redis。
ShopController.java
1 2 3 4 5 6 7 8 9
|
@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; String shopJson = stringRedisTemplate.opsForValue().get(key); if (StrUtil.isNotBlank(shopJson)) { Shop shop = JSONUtil.toBean(shopJson, Shop.class); return Result.ok(shop); } Shop shop = getById(id); if (shop==null) { return Result.fail("店铺不存在!"); } stringRedisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(shop)); return Result.ok(shop); } }
|
测试截图对比:
第一次读取,
![](/../images/redis/r17.png)
从图可以看出,存入缓存后读取的速度明显减少了
![](/../images/redis/r18.png)