查询菜品;将查询数据先放入Redis;修改后,清理Redis缓存

This commit is contained in:
Bunny 2024-01-09 14:30:20 +08:00
parent 97de686244
commit 39640025af
7 changed files with 66 additions and 23 deletions

View File

@ -1,17 +1,13 @@
package com.sky.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import javax.annotation.Resource;
@Configuration
@Slf4j
public class RedisConfiguration {

View File

@ -1,12 +1,9 @@
package com.sky.config;
import ch.qos.logback.classic.pattern.MessageConverter;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sky.interceptor.JwtTokenAdminInterceptor;
import com.sky.interceptor.JwtTokenUserInterceptor;
import com.sky.json.JacksonObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
@ -47,7 +44,7 @@ public class WebMvcConfiguration extends WebMvcConfigurationSupport {
.addPathPatterns("/admin/**")
.excludePathPatterns("/admin/employee/login");
registry.addInterceptor(jwtTokenAdminInterceptor)
registry.addInterceptor(jwtTokenUserInterceptor)
.addPathPatterns("/user/**")
.excludePathPatterns("/user/user/login")
.excludePathPatterns("/user/shop/status");

View File

@ -10,10 +10,12 @@ import com.sky.vo.DishVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
import java.util.Set;
@RestController
@RequestMapping("/admin/dish")
@ -22,6 +24,8 @@ import java.util.List;
public class DishController {
@Resource
private DishService dishService;
@Resource
private RedisTemplate redisTemplate;
/**
* 新增菜品和口味
@ -34,6 +38,10 @@ public class DishController {
public Result<String> save(@RequestBody DishDTO dishDTO) {
log.info("新增菜品:{}", dishDTO);
dishService.saveWithFlavor(dishDTO);
// 修改新增清理Redis数据
String key = "dish_" + dishDTO.getCategoryId();
redisTemplate.delete(key);
return Result.success();
}
@ -62,6 +70,9 @@ public class DishController {
public Result<String> delete(@RequestParam List<Long> ids) {
log.info("菜品批量删除:{}", ids);
dishService.deleteBatch(ids);
// 以dish_开头全部删除
cleanRedisCache();
return Result.success();
}
@ -90,6 +101,9 @@ public class DishController {
public Result<String> update(@RequestBody DishDTO dishDTO) {
log.info("修改菜品:{}", dishDTO);
dishService.updateWithFlavor(dishDTO);
// 如果修改了就将所有的缓存数据全部删除
cleanRedisCache();
return Result.success();
}
@ -119,4 +133,14 @@ public class DishController {
List<Dish> list = dishService.list(categoryId);
return Result.success(list);
}
/**
* 如果修改了就将所有的缓存数据全部删除
*/
private void cleanRedisCache() {
Set keys = redisTemplate.keys("dish_*");
if (keys != null && !keys.isEmpty()) {
redisTemplate.delete(keys);
}
}
}

View File

@ -5,10 +5,11 @@ import com.sky.result.Result;
import com.sky.service.CategoryService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
@RestController("userCategoryController")
@ -16,15 +17,16 @@ import java.util.List;
@Api(tags = "C端-分类接口")
public class CategoryController {
@Autowired
@Resource
private CategoryService categoryService;
/**
* 查询分类
* @param type
* @return
*
* @param type Integer
* @return Result<List < Category>>
*/
@GetMapping("/list")
@GetMapping("list")
@ApiOperation("查询分类")
public Result<List<Category>> list(Integer type) {
List<Category> list = categoryService.list(type);

View File

@ -1,5 +1,6 @@
package com.sky.controller.user;
import com.alibaba.fastjson.JSON;
import com.sky.constant.StatusConstant;
import com.sky.entity.Dish;
import com.sky.result.Result;
@ -8,35 +9,52 @@ import com.sky.vo.DishVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
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.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
import java.util.concurrent.TimeUnit;
@RestController("userDishController")
@RequestMapping("/user/dish")
@Slf4j
@Api(tags = "C端-菜品浏览接口")
public class DishController {
@Autowired
@Resource
private DishService dishService;
@Resource
private RedisTemplate redisTemplate;
/**
* 根据分类id查询菜品
*
* @param categoryId
* @return
* @param categoryId Long
* @return Result<List < DishVO>>
*/
@GetMapping("/list")
@ApiOperation("根据分类id查询菜品")
public Result<List<DishVO>> list(Long categoryId) {
public Result<List<DishVO>> list(@RequestParam Long categoryId) {
// 设置Redis中key
String key = "dish_" + categoryId;
// 查询Redis中数据
List<DishVO> list = (List<DishVO>) redisTemplate.opsForValue().get(key);
// 如果不为空返回集合
if (list != null && !list.isEmpty()) {
return Result.success(list);
}
// 如果Redis中没有将值放入
Dish dish = new Dish();
dish.setCategoryId(categoryId);
dish.setStatus(StatusConstant.ENABLE);// 查询起售中的菜品
List<DishVO> list = dishService.listWithFlavor(dish);
// 将这个数据保存到redis中
list = dishService.listWithFlavor(dish);
redisTemplate.opsForValue().set(key, JSON.toJSON(list), 7, TimeUnit.DAYS);
// 如果Redis中没有返回这个数据并保存这个数据
return Result.success(list);
}

View File

@ -18,6 +18,7 @@ import com.sky.service.DishService;
import com.sky.vo.DishVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -34,6 +35,8 @@ public class DishServiceImpl implements DishService {
private DishFlavorMapper dishFlavorMapper;
@Resource
private SetMealDishMapper setMealDishMapper;
@Resource
private RedisTemplate redisTemplate;
/**
* 新增菜品和口味
@ -195,6 +198,10 @@ public class DishServiceImpl implements DishService {
}
}
}
// 停售时将Redis缓存清除
dish = dishMapper.getById(id);
String key = "dish_" + dish.getCategoryId();
redisTemplate.delete(key);
}
/**

View File

@ -21,7 +21,6 @@ spring:
port: ${sky.redis.port}
password: ${sky.redis.password}
database: ${sky.redis.database}
timeout: 5000
mybatis: