首页 > 其他分享 >项目一缓存商品

项目一缓存商品

时间:2024-07-25 21:57:45浏览次数:16  
标签:缓存 return 项目 list 商品 Result 菜品 import id

文章目录

概要

因为商品是经常被浏览的,所以数据库的访问量就问大大增加,造成负载过大影响性能,所以我们需要把商品缓存到redis当中,因为redis是存在内存中的,所以效率会比MySQL的快.

整体架构流程

 

技术细节

  • 我们在缓存时需要保持数据的一致性
  • 所以当管理端用户进行增删改操作的时候需要清理缓存,否则用户看到的商品则是缓存中的(未被修改的商品)

小结

@GetMapping("/list")
    @ApiOperation("根据分类id查询菜品")
    public Result<List<DishVO>> list(Long categoryId) {
        //缓存菜品
        String key = "dish_" + categoryId;
        List<DishVO> list = (List<DishVO>) redisTemplate.opsForValue().get(key);
        if (list != null && list.size() > 0) {
            return Result.success(list);
        }
        Dish dish = new Dish();
        dish.setCategoryId(categoryId);
        dish.setStatus(StatusConstant.ENABLE);//查询起售中的菜品

        list = dishService.listWithFlavor(dish);
        //如果不存在则查数据库存入redis
        redisTemplate.opsForValue().set(key,list);
        return Result.success(list);
    }

package com.sky.controller.admin;

import com.sky.dto.DishDTO;
import com.sky.dto.DishPageQueryDTO;
import com.sky.entity.Dish;
import com.sky.result.PageResult;
import com.sky.result.Result;
import com.sky.service.DishService;
import com.sky.vo.DishVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Delete;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;

import javax.websocket.server.PathParam;
import java.util.List;
import java.util.Set;

@RestController
@RequestMapping("admin/dish")
@Slf4j
@Api(tags = "菜品相关接口")
public class DishController {

    @Autowired
    private DishService dishService;
    @Autowired
    private RedisTemplate redisTemplate;

    /**
     * 新增菜品
     * @param dishDTO
     * @return
     */
    @PostMapping
    @ApiOperation("新增菜品")
    public Result save(@RequestBody DishDTO dishDTO){
        Long categoryId = dishDTO.getCategoryId();
        String key = "dish_" + categoryId;
        deleteCache(key);
        dishService.saveWithFlavor(dishDTO);
        return Result.success();
    }

    /**
     * 菜品分页查询
     * @param dishPageQueryDTO
     * @return
     */
    @GetMapping("/page")
    @ApiOperation("菜品分页查询")
    public Result<PageResult> page(DishPageQueryDTO dishPageQueryDTO){
        log.info("菜品分页查询:{}", dishPageQueryDTO);
        PageResult pageResult = dishService.pageQuery(dishPageQueryDTO);
        return Result.success(pageResult);
    }


    /**
     * 批量删除菜品
     * @param ids
     * @return
     */
    @DeleteMapping
    @ApiOperation("批量删除菜品")
    public Result delete(@RequestParam List<Long> ids){
        log.info("批量删除菜品:{}", ids);
        deleteCache("dish_*");
        dishService.deleteBatch(ids);
        return Result.success();
    }

    /**
     * 根据id查询菜品
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    @ApiOperation("根据id查询菜品")
    public Result<DishVO> getById(@PathVariable Long id){
        log.info("根据id查询菜品");
        DishVO dishVO = dishService.getByIdWithFlavor(id);
        return Result.success(dishVO);
    }

    /**
     * 修改菜品
     * @param dishDTO
     * @return
     */
    @PutMapping
    @ApiOperation("修改菜品")
    public Result update(@RequestBody DishDTO dishDTO){
        log.info("修改菜品:{}",dishDTO);
        deleteCache("dish_*");
        dishService.updateWithFlavor(dishDTO);
        return Result.success();
    }

    @GetMapping("/list")
    public Result<List<Dish>> list(@RequestParam Long categoryId){
        log.info("根据分类id查询菜品:{}",categoryId);
        List<Dish> list = dishService.list(categoryId);
        return Result.success(list);
    }

    @PostMapping("/status/{status}")
    @ApiOperation("菜品起售停售")
    public Result<String> startOrStop(@PathVariable Integer status, Long id){
        deleteCache("dish_*");
        dishService.startOrStop(status,id);
        return Result.success();
    }

    private void deleteCache(String pattern){
        Set keys = redisTemplate.keys(pattern);
        redisTemplate.delete(keys);
    }
}

标签:缓存,return,项目,list,商品,Result,菜品,import,id
From: https://blog.csdn.net/Very_a/article/details/140688992

相关文章

  • django_创建菜单(实现整个项目的框架,调包)
    文章目录前言代码仓库地址在线演示网址启动网站的时候出现错误渲染路径的一些说明文件结构网页显示一条错误路由顺序js打包出现问题的代码函数没有起作用关于进度开发细节显示不了图片梳理一下函数调用的流程修改一些宽度参数classjs里面的一些细节让三个按钮可以点击设......
  • java包装类型缓存简单探究-Integer为例
    文章目录包装类型缓存自动装箱与valueOf感悟结语包装类型缓存包装类型缓存是什么本文以常用的Integer包装类为例做一个探索,感兴趣可以用类似方法查看其他包装类。我们都知道它会缓存-128到127之间的整数Integer对象。结论大伙都知道。那么我们今天就来探究一下底......
  • 项目成功秘诀:选择合适的协同进度工具
    国内外主流的10款项目协同进度软件对比:PingCode、Worktile、Tower、禅道项目管理软件、Tapd、金数据、Asana、Trello、JIRA、Smartsheet。在今天快速变化的项目管理环境中,找到一款能够有效促进团队协作和进度跟踪的软件,已成为许多项目经理和团队领导者面临的主要挑战。一个合......
  • GitHub上一些值得关注的区块链项目
    FuelLabs/fuel-core-Rust全节点实现,支持Fuelv2协议https://github.com/topics/blockchain-projects。ethereum/go-ethereum-Ethereum协议的官方Go语言实现。bitcoinbook/bitcoinbook-《精通比特币》第三版,开源书籍,深入讲解比特币开发。heyxyz/hey-基于LensP......
  • 一个简单的水泵日志匹配项目
    项目名称水泵智慧统计软件项目简介本项目是针对某单位水泵运行日志进行分析,具有智能统计水泵单次运行时长,固定日期内运行次数,及水泵异常信息的功能。安装说明双击Qdmetro水泵智慧统计软件.exe使用使用说明选择线路操作:确保你正在处理的数据与对应的线路相匹配。如果......
  • 程序员可弟哥的贴心伙伴:Codigger 之软件项目体检
    在代码的浩瀚世界里,程序员可弟哥每日都在努力追寻着卓越与完美。作为一家知名软件公司的资深开发者,他经常需要面对紧迫的项目截止日期和复杂的业务需求。然而,在实际的项目开发过程中,他却时常面临诸多棘手的挑战。就拿最近的一个项目来说,可弟哥负责开发一款复杂的企业级应用程序—......
  • Spring Boot + Maven 多模块项目开发详解
    SpringBoot+Maven多模块项目开发详解在现代软件开发中,模块化开发是一种非常重要的设计思想。它不仅能提高代码的可维护性,还能促进团队协作。今天,我们就来聊聊如何使用SpringBoot和Maven来构建一个多模块项目。为什么要使用多模块?在开始之前,我们先来讨论一下为什么要使......
  • ubuntu下goland打开新的项目闪退的解决办法
    安装最新的ubuntu2024.04版本的desktop,安装了goland作go的开发遇到问题,刚从服务器clone的项目,使用goland打开,会闪退,再打开goland,会回到上一次正常打开的项目经过多次测试,发现是无法自动创建.idea目录导致,我复制一个其他项目的.idea的目录进取后,可以正常打开,但相关项目是信息是错......
  • 清理单片机编译过程中产生的编译文件(压缩以减少项目体积)
    1)新建文本文件,将文件名修改为Clear.bat2)用记事本打开该文件,将下面代码复制文件中即可@echooff::::::::::::::::::::::::::::::::1)清理微芯编译生成的中间文件::2)清理辉芒微编译生成的中间文件::3)清理芯圣编译生成的中间文件::*使用方法*::清理微芯、辉芒微拷入......
  • 使用 IntelliJ IDEA 脚手架快速搭建 Spring Boot 项目
    使用IntelliJIDEA脚手架快速搭建SpringBoot项目大家好!今天我们来聊聊如何使用IntelliJIDEA脚手架快速搭建一个SpringBoot项目。SpringBoot是一个非常流行的Java框架,它简化了Spring应用的开发过程。而IntelliJIDEA则是一个功能强大的IDE,能够大大提高我们的......