SpringBoot使用redis作为缓存的实例

目录

什么是缓存?

缓存的作用?

缓存的成本?

实际项目中的应用

代码展示


什么是缓存?

缓存就是数据交换的缓冲区(称作Cache [ kæʃ ] ),是存贮数据的临时地方,一般读写性能较高。

缓存的作用?

降低后端负载

提高读写效率,降低响应时间

缓存的成本?

数据一致性成本(多了一份缓存中的数据)

代码维护成本(代码复杂度上升)

运维成本(会有缓存雪崩等一系列问题)

实际项目中的应用

举个栗子:下面的代码就是直接查询数据库的方法

java 复制代码
 /**
     * 根据id查询商铺信息
     * @param id 商铺id
     * @return 商铺详情数据
     */
    @GetMapping("/{id}")
    public Result queryShopById(@PathVariable("id") Long id) {
        return Result.ok(shopService.getById(id));
    }

它的理论模型就应该是这样的

如果接入了缓存之后的模型应该是这样的:

此时的业务逻辑如下图所示:

代码展示

现在根据上面的逻辑自己定义一个方法引入缓存

java 复制代码
  @GetMapping("/{id}")
    public Result queryShopById(@PathVariable("id") Long id) {
        return shopService.queryById(id);
    }
java 复制代码
public interface IShopService extends IService<Shop> {

    Result queryById(Long id);
}
java 复制代码
@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 jsonShop = stringRedisTemplate.opsForValue().get(key);
        //2.判断是否存在
        if (StrUtil.isNotBlank(jsonShop)) {
            //3.存在,直接返回
            Shop shop = JSONUtil.toBean(jsonShop, 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);
    }
}

重新运行,进行测试,可以提前知道第一次查询是没有缓存中的数据的,走的是数据库,这次的响应时间为:

此时redis中已经有了缓存数据

再次请求:

相关推荐
懂得节能嘛.3 分钟前
【动态配置中心】Java+Redis构建动态配置中心
java·开发语言·redis
韩立学长3 分钟前
基于微信小程序的公益捐赠安全平台9hp4t247 包含完整开发套件(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·微信小程序·小程序
智能化咨询6 分钟前
SQL之参数类型讲解——从基础类型到动态查询的核心逻辑
数据库·oracle
doris82046 分钟前
使用Yum安装Redis
数据库·redis·缓存
有一个好名字9 分钟前
万字 Apache ShardingSphere 完全指南:从分库分表到分布式数据库生态
数据库·分布式·apache
Boilermaker199228 分钟前
【Redis】哨兵与对脑裂的情况分析
数据库·redis·缓存
橘 日向32 分钟前
admin二维码字符过长导致显示失败问题
数据库·oracle
啊吧怪不啊吧1 小时前
SQL之参数类型讲解
数据库·sql
摇滚侠1 小时前
Spring Boot 3零基础教程,WEB 开发 内容协商机制 笔记34
java·spring boot·笔记·缓存
GIS数据转换器1 小时前
带高度多边形,生成3D建筑模型,支持多种颜色或纹理的OBJ、GLTF、3DTiles格式
数据库·人工智能·机器学习·3d·重构·无人机