3東莞網(wǎng)站建設(shè)外貿(mào)網(wǎng)站推廣平臺(tái)
問(wèn)題:不是所有的數(shù)據(jù)都需要請(qǐng)求后端的
- 不是所有的數(shù)據(jù)都需要請(qǐng)求后端的,有些數(shù)據(jù)是
重復(fù)的、可以復(fù)用的
解決方案:緩存
實(shí)現(xiàn)思路:每一個(gè)分類(lèi)為一個(gè)key,一個(gè)可以下面可以有很多菜品
- 前端是按照分類(lèi)查詢(xún)的,所以我們需要通過(guò)分類(lèi)來(lái)緩存
緩存代碼
/*** 根據(jù)分類(lèi)id查詢(xún)菜品** @param categoryId* @return*/@GetMapping("/list")@ApiOperation("根據(jù)分類(lèi)id查詢(xún)菜品")public Result<List<DishVO>> list(Long categoryId) {// 查詢(xún)r(jià)edis緩存String key = "dish_" + categoryId;// 如果緩存中有數(shù)據(jù),直接返回List<DishVO> list= (List<DishVO>) redisTemplate.opsForValue().get(key);if(ObjectUtil.isNotEmpty(list)){return Result.success(list);}// 如果緩存中沒(méi)有數(shù)據(jù),查詢(xún)數(shù)據(jù)庫(kù),然后將數(shù)據(jù)存入緩存Dish dish = new Dish();dish.setCategoryId(categoryId);dish.setStatus(StatusConstant.ENABLE);//查詢(xún)起售中的菜品list = dishService.listWithFlavor(dish);redisTemplate.opsForValue().set(key, list);return Result.success(list);}
清除緩存
當(dāng)數(shù)據(jù)發(fā)生變化的時(shí)候,需要將歷史緩存清除掉,
防止不一致
package com.sky.controller.admin;import java.util.List;
import java.util.Set;@RestController
@RequestMapping("/admin/dish")
@Api(tags = "菜品相關(guān)接口")
@Slf4j
public class DishController {private DishService dishService;private RedisTemplate redisTemplate;@Autowiredpublic DishController(DishService dishService, RedisTemplate redisTemplate) {