springboot3缓存redis菜品处理代码
后端:
- package com.zidiu.controller.admin;
-
- import com.zidiu.dto.DishDTO;
- import com.zidiu.dto.DishPageQueryDTO;
- import com.zidiu.entity.Dish;
- import com.zidiu.result.PageResult;
- import com.zidiu.result.Result;
- import com.zidiu.service.DishService;
- import com.zidiu.vo.DishVO;
- import io.swagger.v3.oas.annotations.Operation;
- import io.swagger.v3.oas.annotations.tags.Tag;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.data.redis.core.RedisTemplate;
- import org.springframework.web.bind.annotation.*;
-
- import java.util.List;
- import java.util.Set;
-
- @RestController
- @Slf4j
- @RequestMapping("/admin/dish")
- @Tag(name = "菜品相关接口")
- public class DishController {
- @Autowired
- private DishService dishService;
- @Autowired
- private RedisTemplate redisTemplate;
- /**
- * 新增菜品
- *
- * @param dishDTO
- * @return
- */
- @PostMapping
- @Operation(summary = "新增菜品", description = "新增菜品")
- public Result<String> save(@RequestBody DishDTO dishDTO) {
- log.info("新增菜品:{}", dishDTO);
- dishService.saveWithFlavor(dishDTO);
- //清理缓存数据
- String key = "dish_" + dishDTO.getCategoryId();
- cleanCache(key);
- return Result.success();
- }
-
- /**
- * 菜品分页查询
- *
- * @param dishPageQueryDTO
- * @return
- */
- @GetMapping("/page")
- @Operation(summary = "菜品分页查询", description = "菜品分页查询")
- public Result<PageResult> page(DishPageQueryDTO dishPageQueryDTO) {
- log.info("菜品分页查询:{}", dishPageQueryDTO);
- PageResult pageResult = dishService.pageQuery(dishPageQueryDTO);
- return Result.success(pageResult);
- }
-
- /**
- * 菜品批量删除
- *
- * @param ids
- * @return
- */
- @DeleteMapping
- @Operation(summary = "菜品批量删除", description = "菜品批量删除")
- public Result<String> delete(@RequestParam List<Long> ids) {
- log.info("菜品批量删除:{}", ids);
- dishService.deleteBatch(ids);
- //将所有的菜品缓存数据清理掉,所有以dish_开头的key
- cleanCache("dish_*");
-
- return Result.success();
- }
-
- /**
- * 根据id查询菜品
- *
- * @param id
- * @return
- */
- @GetMapping("/{id}")
- @Operation(summary = "根据id查询菜品", description = "根据id查询菜品")
- public Result<DishVO> getById(@PathVariable Long id) {
- log.info("根据id查询菜品:{}", id);
- DishVO dishVO = dishService.getByIdWithFlavor(id);
- return Result.success(dishVO);
- }
-
- /**
- * 修改菜品
- *
- * @param dishDTO
- * @return
- */
- @PutMapping
- @Operation(summary = "修改菜品", description = "修改菜品")
- public Result<String> update(@RequestBody DishDTO dishDTO) {
- log.info("修改菜品:{}", dishDTO);
- dishService.updateWithFlavor(dishDTO);
- //将所有的菜品缓存数据清理掉,所有以dish_开头的key
- cleanCache("dish_*");
- return Result.success();
- }
-
- /**
- * 菜品起售停售
- *
- * @param status
- * @param id
- * @return
- */
- @PostMapping("/status/{status}")
- @Operation(summary = "菜品起售停售", description = "菜品起售停售")
- public Result<String> startOrStop(@PathVariable Integer status, Long id) {
- dishService.startOrStop(status, id);
- //将所有的菜品缓存数据清理掉,所有以dish_开头的key
- cleanCache("dish_*");
- return Result.success();
- }
-
- /**
- * 根据分类id查询菜品
- *
- * @param categoryId
- * @return
- */
- @GetMapping("/list")
- @Operation(summary = "根据分类id查询菜品", description = "根据分类id查询菜品")
- public Result<List<Dish>> list(Long categoryId) {
- List<Dish> list = dishService.list(categoryId);
- return Result.success(list);
- }
-
- /**
- * 清理缓存数据
- * @param pattern
- */
- private void cleanCache(String pattern){
- Set keys = redisTemplate.keys(pattern);
- redisTemplate.delete(keys);
- }
- }
复制代码 前端:
- package com.zidiu.controller.user;
-
- import com.zidiu.constant.StatusConstant;
- import com.zidiu.entity.Dish;
- import com.zidiu.result.Result;
- import com.zidiu.service.DishService;
- import com.zidiu.vo.DishVO;
- import io.swagger.v3.oas.annotations.Operation;
- import io.swagger.v3.oas.annotations.tags.Tag;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.data.redis.core.RedisTemplate;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
- import java.util.List;
-
- @RestController("userDishController")
- @RequestMapping("/user/dish")
- @Slf4j
- @Tag(name = "C端-菜品浏览接口")
- public class DishController {
- @Autowired
- private DishService dishService;
- @Autowired
- private RedisTemplate redisTemplate;
-
- /**
- * 根据分类id查询菜品
- *
- * @param categoryId
- * @return
- */
- @GetMapping("/list")
- @Operation(summary = "根据分类id查询菜品", description = "根据分类id查询菜品")
- public Result<List<DishVO>> list(Long categoryId) {
- //构造redis中的key,规则:dish_分类id
- String key = "dish_" + categoryId;
- //查询redis中是否存在菜品数据
- List<DishVO> list = (List<DishVO>) redisTemplate.opsForValue().get(key);
- if(list != null && !list.isEmpty()){
- //如果存在,直接返回,无须查询数据库
- return Result.success(list);
- }
- Dish dish = new Dish();
- dish.setCategoryId(categoryId);
- dish.setStatus(StatusConstant.ENABLE);//查询起售中的菜品
-
- //如果不存在,查询数据库,将查询到的数据放入redis中
- list = dishService.listWithFlavor(dish);
- redisTemplate.opsForValue().set(key, list);
- return Result.success(list);
- }
- }
复制代码 缓存配置:
- package com.zidiu.config;
-
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.data.redis.connection.RedisConnectionFactory;
- import org.springframework.data.redis.core.RedisTemplate;
- import org.springframework.data.redis.serializer.StringRedisSerializer;
-
- @Configuration
- @Slf4j
- public class RedisConfiguration {
-
- @Bean
- public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
- log.info("开始创建redis模板对象...");
- RedisTemplate redisTemplate = new RedisTemplate();
- //设置redis的连接工厂对象
- redisTemplate.setConnectionFactory(redisConnectionFactory);
- //设置redis key的序列化器
- redisTemplate.setKeySerializer(new StringRedisSerializer());
- return redisTemplate;
- }
- }
复制代码 完整源代码:
jinhei-waimai.zip
(526.02 KB, 下载次数: 0, 售价: 50 金币)
Spring Data Redis使用方式
SpringBoot3+SSM的企业级Java项目实战之外卖小程序
|