关于(苍穹外卖)Cache问题的一点困惑与思路

因为本人,em---昨天看的,今天早上就有点迷惑了,在这里记录一下,并捋一下思路,

首先要明确的一点就是,我们是在uesr端进行缓存的,并且,菜品缓存是中的key是

String key = "dish_"+categoryId;

是根据菜品的分类id,作为key值的!!!这点先明确一下,不要搞混了,它可不是用菜品的id作为key值的,

@PostMapping
    @ApiOperation("新增菜品")
    public Result save(@RequestBody DishDTO dishDTO){
        log.info("新增菜品{}",dishDTO);
        dishService.saveAndFlavor(dishDTO);
//        清除数据缓存
        String key = "dish_"+dishDTO.getCategoryId();
        clearCache(key);
        return Result.success();
    }

注意:这里面这个清除缓存是那个分类新增了,就清除那个分类的缓存就行了,无需清除全部所有分类的缓存

  @DeleteMapping
    @ApiOperation("菜品批量删除")
    public Result Delete(@RequestParam List<Long> ids){//这样可以让spring自动将它分成{1,2,3}的形式
        log.info("菜品批量删除{}",ids);
        dishService.deleteBatch(ids);
//        删除缓存,直接删除全部缓存.删除全部以dish_开头的key
        clearCache("dish_*");
        return Result.success();
    }

批量删除为什么要删除全部缓存呢?是因为你批量删除,有可能在你删除的选项里面有属于A类的菜品,也可能有B类的菜品...就是她有可能会涉及多个分类,所以我们这边直接删除全部分类的缓存,简单省事

 @PutMapping
    @ApiOperation("修改菜品")
    public Result update(@RequestBody DishDTO dishDTO){
        log.info("修改菜品{}",dishDTO);
        dishService.updateWithFlavor(dishDTO);
        //        删除缓存,直接删除全部缓存.删除全部以dish_开头的key
        clearCache("dish_*");
        return Result.success();
    }

修改菜品为什么也要删除全部缓存呢?直接那个修改了就删除那个分类的缓存不就行了吗?不是这样的你看我们的修改页面,他是可以修改菜品所属分类的,举个例子,假如鸡蛋汤原本属于汤类,然后你修改成了东方糕类,这样就涉及到了多个分类的缓存,所以简单起见我们直接删除全部的分类的缓存,

/**
     * 菜品的起售停售
     * @param status
     * @param id
     * @return
     */
    @PostMapping("/status/{status}")
    @ApiOperation("菜品的起售或停售")
    public Result startOrStop(@PathVariable Integer status,Long id){
        log.info("菜品的起售或停售{},{}",status,id);
        dishService.startOrStop(status,id);
        clearCache("dish_*");
        return Result.success();
    }

菜品的这个起售和和停售,是今天早上让我很迷惑的一个问题,就是为什么,这个也要清除全部内存呢?我只是改了一个分类中某一个菜品的售卖状态,又没有涉及更改到多个分类,为什么还要删除全部分类的缓存呢?(ps:我是在套餐起售和停售哪里疑惑的,看到这里的小伙伴应该懂得我说的什么,两者一样,我就直接使用套餐那个来讲了)

/**
     * 套餐的停售或起售
     * @return
     */
    @PostMapping("/status/{status}")
    @ApiOperation("套餐的停售或起售")
//    @CacheEvict(cacheNames = "setmealCache",key = "#id")
    @CacheEvict(cacheNames = "setmealCache",allEntries = true)
    public Result startOrStop(@PathVariable Integer status,Long id){
        log.info("套餐的停售或起售");
        setmealService.startOrStop(status,id);
        return Result.success();
    }

我当时疑惑为什么不在方法上添加

 @CacheEvict(cacheNames = "setmealCache",key = "#id")

这个注释,直接修改这个id所对应的套餐分类不就行了么?一直很困惑,然后就上网查了查,发现一位大佬写的文章(放文章末尾了,感兴趣的同学可以去看一看,给大佬点赞),然后回头又看了一下代码

原来是:开头所强调的,菜品(套餐)所存储的key指的是所属分类的id,而不是菜品(套餐)的id,但是你看这里菜品(套餐)的起售停售这里他这个id指的是某一个菜品他自己的id而不是所属分类的id!!我把两者搞混了!

然后,话说回来,他毕竟只是改了一个分类的某个菜品(套餐),又不涉及多个,为什么要删除全部的缓存呢?

因为它参数里面传的是菜品的id,而不是其所属分类的id,所以你没办法把它的分类id找出来传进去,,所以你可以简单地选择删除所有分类的缓存,简单除暴,当然你也可以根据菜品的id把对应的菜品数据查询出来,菜品里面就有分类的id,之后动态的把key构造出来 然后清理某一个key就可以了。但是这样写需要额外的去数据库查询数据 就有的得不偿失了。毕竟使用缓存的目的就是缓解数据库的压力,你这再去为了缓存而去查询数据库,不是倒反天罡了吗

o.o 对了还有位大佬的博客也是关于这个问题的,xdm可以去看看这个哥好像把老师讲的都注释上了

苍穹外卖-day07:缓存菜品(业务逻辑),缓存套餐(Spring Cache),添加购物车(业务逻辑、冗余字段、动态sql属性字段位置),查看购物车,删除购物车中一个商品_如果你的后台数据中某个菜品只剩2个了,但是此时大量的订单进来了怎么办?-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/652444.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ora-00392 ora-00312错误处理

检查当前日志组状态 对日志组进行clear操作 重新开库无报错

CSS 一些常见的大坝设备仪器标识绘制

文章目录 需求分析1. 坝基测压管2. 坝体测压管3. 竖向位移兼水平位移测点4. 竖向位移测点5. 三角量水堰6. 水平位移观测工作基点7. 竖向位移观测水准基点8. 其他 需求 绘制一些常见的设备仪器标识符 分析 1. 坝基测压管 <!DOCTYPE html> <html lang"en"…

中国1KM分辨率年平均气温数据集

该数据为中国逐年平均温度数据&#xff0c;空间分辨率为0.0083333&#xff08;约1km&#xff09;&#xff0c;时间为1901年-2022年。该数据集是根据全国2472个气象观测点数据进行插值获取&#xff0c;验证结果可信。本数据集包含的地理空间范围是全国主要陆地&#xff08;包含港…

【ARM+Codesys案例】基于全志T3+Codesys的快递物流单件分离器控制系统

物流涉及国计民生&#xff0c;是在社会发展中不可或缺的一环。随着社会的改革开放&#xff0c;工业发展迅猛&#xff0c;此时也伴随着物流业的快速发展。电商、快递等行业业务量爆发以及人工成本的不断上涨&#xff0c;自动化输送分拣设备市场呈现井喷式发展。物流行业从传统方…

探索智能零售的未来商机与运营策略

探索智能零售的未来商机与运营策略 在智能零售的广阔图景中&#xff0c;无人售货机加盟赫然矗立为一股不可小觑的力量&#xff0c;预示着零售业态未来的转型与机遇。其核心优势多维展开&#xff0c;具体阐述如下&#xff1a; 1. **全天候服务**&#xff1a;无人售货机的运行跨…

ACS美国化学学会文献去哪里查找

今天有位同学求助一篇ACS美国化学学会文献&#xff0c;下面就以这篇文献实例讲解一下如何自己解决文献下载的过程。篇名&#xff1a;Biomimetic Superstructured Interphase for Aqueous Zinc-Ion Batteries 知道文献的来源数据库&#xff0c;直接去文献来源数据库下载文献又准…

两台电脑怎么互传文件?这些方法你值得一试

在日常生活和工作中&#xff0c;我们经常需要在不同电脑之间传输文件&#xff0c;这可能是文档、照片、音乐或其他类型的文件。两台电脑怎么互传文件是非常有用的技能&#xff0c;可以提高工作效率并简化文件共享过程。本文将介绍三种常见的方法&#xff0c;帮助您了解如何在两…

【Pandas】深入解析`pd.to_sql()`函数

【Pandas】深入解析pd.to_sql()函数 &#x1f308; 欢迎莅临我的个人主页&#x1f448;这里是我深耕Python编程、机器学习和自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;并乐于分享知识与经验的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1…

选择排序。

选择排序是一种简单直观的排序算法&#xff0c;其基本思路是在未排序的序列中找到最小&#xff08;或最大&#xff09;元素&#xff0c;然后将其存放到序列的起始位置。 void select_sort(int arr[], int sz) {int i 0;for (i 0; i < sz; i) {int min i;int j 0;for (j…

SSE(Server Sent Event) 踩坑留念

整条链路是 客户端A --> 服务端 A —> 服务端 B 我负责服务端 A 此时要注意 Client 中的 processes 的写法 Post(value “/v2/xx”, processes MediaType.TEXT_EVENT_STREAM) 这样写是一直报错的 改成下面的写法才可以 Post(value “/v2/xx”, processes MediaT…

打破传统界限,数字沙盘演绎乡村魅力!

自古以来&#xff0c;沙盘模型便以其独特的方式汇聚并展现着综合信息。然而&#xff0c;随着多媒体技术的突飞猛进&#xff0c;这一传统展示形式也迎来了深刻的变革&#xff0c;三维数字沙盘应运而生&#xff0c;它不仅融合了先进的科技元素&#xff0c;更以其独特的呈现方式&a…

Rabbit MQ学习之《基础概念》

Message Queue 1 什么是MQ MQ(message queue)&#xff0c;本质是个队列&#xff0c;FIFO 先入先出&#xff0c;只不过队列中存放的内容是message而已&#xff0c;同时是一种跨进程的通信机制&#xff0c;用于上下游传递消息。 在互联网架构中&#xff0c;MQ 是一种非常常见的…

半藏酒业新零售分红制度拆解,起盘运营服务商

半藏酱酒招商模式&#xff0c;白酒合伙人模式&#xff0c;顶层模式设计 社群玩法用这几年的互联网词汇描述叫私域营销。虽然不走传统商超&#xff0c;酒桌之外很少能看到&#xff0c;但随着核心消费者裂变和流量汇聚&#xff0c;现在能见度越来越高&#xff0c;并溢出到达公域。…

【FPGA】Verilog:2-bit 二进制比较器的实现(2-bit binary comparator)

解释 2-bit 二进制比较器仿真结果及过程说明(包括真值表和卡诺图) 真值表和卡洛图如下: 2-bit Binary Comparator A1 A2 B1

密码学基础概念

加密性 什么是加密&#xff1f; 1.对原有的明文数据&#xff0c;执行某种运算&#xff0c;得到密文数据。 2.密文数据对于未授权人员而言&#xff0c;在一定上程度上加大了解读的难度 3.加密功能用于实现机密性 什么是密钥&#xff1f; 1.如同持有保险柜钥匙才能打开保险柜…

记录集连接——kettle开发25

一、记录集连接 记录集连接就像数据库的左连接、右连接、内连接、外连接。 需要注意的是&#xff0c;因为我们是对数据流进行操作&#xff0c;因此我们在进行记录集连接操作前&#xff0c;需要先将数据进行排序。 新版的KETTLE&#xff0c;名字都改了&#xff0c;叫Merge joi…

实现按块复制元素的进阶技巧

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、按块复制元素的重要性 二、使用LED模块创建数组并复制 三、实现按块复制的具体步骤 四…

智能财务分析软件怎么样?看奥威BI现身说法

随着大数据时代的到来&#xff0c;财务分析已不再是简单的数据汇总和报表制作&#xff0c;而是需要运用先进的智能技术&#xff0c;对数据进行深度挖掘和智能分析&#xff0c;以提供有价值的决策支持。在这一背景下&#xff0c;BI智能财务分析软件应运而生&#xff0c;其中奥威…

语音转文字软件哪个好?掌握这3个方法,告别手写记录

开会多又杂&#xff0c;手写记录累死人&#xff1f; 每天的工作日程中&#xff0c;会议总是不可或缺的一部分。不论是团队讨论还是项目汇报&#xff0c;会议记录都是必不可少的。但手写记录会议内容不仅耗时耗力&#xff0c;还容易遗漏重要信息。 那么&#xff0c;有没有更高…

3本救命神刊!录用率≥98%,非预警,最快2天录用!

本救命神刊&#xff0c;录用率高&#xff0c;无预警&#xff0c;14年期刊编辑全程保驾护航&#xff0c;省心省力助你快速发表&#xff01; 进展超顺 SSCI 社科类SSCI • 影响因子&#xff1a;3.0-4.0 • 期刊分区&#xff1a;JCR2/3区&#xff0c;中科院3/4区 • Index&…