• day07-缓存套餐


    业务逻辑

    1. 导入Spring Cache和Redis相关坐标
    2. 开启缓存注解功能
    3. 用户端添加注解
    4. 管理端添加注解

    1. 导入Spring Cache和Redis相关坐标

            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-cacheartifactId>
            dependency>
            
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-data-redisartifactId>
            dependency>
    

    2. 开启缓存注解功能

    @SpringBootApplication
    @EnableTransactionManagement 
    @Slf4j
    @EnableCaching		//开启缓存注解功能
    public class SkyApplication {
        public static void main(String[] args) {
            SpringApplication.run(SkyApplication.class, args);
            log.info("server started");
        }
    }
    

    3. 用户端添加注解
    user.SetmealController.java
    使用@Cacheable注解
    先查询缓存中是否有数据
    有数据:直接返回数据,无需查询数据库
    无数据:执行SQL语句进行查询,将查询的结果缓存到redis

    	/**
         * 条件查询
         * @param categoryId
         * @return
         */
        @GetMapping("/list")
        @ApiOperation("根据分类id查询套餐")
        @Cacheable(cacheNames = "setmealCache", key = "#categoryId")    //redis中的key名称:setmealCache::100
        public Result<Setmeal>> list(Long categoryId) {
            Setmeal setmeal = new Setmeal();
            setmeal.setCategoryId(categoryId);
            setmeal.setStatus(StatusConstant.ENABLE);
    
            List<Setmeal> list = setmealService.list(setmeal);
            return Result.success(list);
        }
    

    4. 管理端添加注解
    新增、删除、修改、起停售中删除redis中的缓存
    使用**@CacheEvict**

    	/**
         * 新增套餐
         * @param setmealDTO
         * @return
         */
        @PostMapping
        @ApiOperation("新增套餐")
        @CacheEvict(cacheNames = "setmealCache", key = "#setmealDTO.categoryId")    //key为 setmealCache::100
        public Result save(@RequestBody SetmealDTO setmealDTO) {
            setmealService.saveWithDish(setmealDTO);
            return Result.success();
        }
    
    	/**
         * 批量删除套餐
         * @param ids
         * @return
         */
        @DeleteMapping
        @ApiOperation("批量删除套餐")
        @CacheEvict(cacheNames = "setmealCache", allEntries = true)     //清理掉所有的缓存数据
        public Result delete(@RequestParam List<Long> ids){
            setmealService.deleteBatch(ids);
            return Result.success();
        }
    
    	/**
         * 修改套餐
         * @param setmealDTO
         * @return
         */
        @PutMapping
        @ApiOperation("修改套餐")
        @CacheEvict(cacheNames = "setmealCache", allEntries = true)     //清理掉所有的缓存数据
        public Result update(@RequestBody SetmealDTO setmealDTO) {
            setmealService.update(setmealDTO);
            return Result.success();
        }
    
    	/**
         * 套餐起售停售
         * @param status
         * @param id
         * @return
         */
        @PostMapping("/status/{status}")
        @ApiOperation("套餐起售停售")
        @CacheEvict(cacheNames = "setmealCache", allEntries = true)     //清理掉所有的缓存数据
        public Result startOrStop(@PathVariable Integer status, Long id) {
            setmealService.startOrStop(status, id);
    
            //将所有的菜品缓存数据清理掉,所有以dish_开头的key
            cleanCache("dish_*");
            return Result.success();
        }
    
  • 相关阅读:
    uni-app之使用App.vue全局文件的教学
    Python使用scapy库监听指定的网卡数据并转发
    Android使用AtomicReference
    07 内核开发-避免命名冲突经验技巧分享
    idea与vue+ElementUI搭建前后端分离的CRUD
    自己实现str
    用OneFlow实现数据类型自动提升
    ovirt-engine通过UI Plugin自定义页面
    【2022全网最全教程】快速上手前端自动化测试
    全志T113 开发QT播放器导入libcedarc遇到问题
  • 原文地址:https://blog.csdn.net/qq_45801839/article/details/138628982