当前位置: 首页 > news >正文

深圳市做网站前十强合肥网络优化公司有几家

深圳市做网站前十强,合肥网络优化公司有几家,阿里云做私服网站,苏州公司网站建设报价苍穹外卖Day07部分聚焦于缓存功能的实现与优化,通过引入redis缓存机制,结合Spring Cache 注解,降低了数据库负载,提升其响应速度。 以下是清除缓存功能代码: RestController RequestMapping("/admin/dish"…

苍穹外卖Day07部分聚焦于缓存功能的实现与优化,通过引入redis缓存机制,结合Spring Cache 注解,降低了数据库负载,提升其响应速度。

以下是清除缓存功能代码:

@RestController
@RequestMapping("/admin/dish")
@Slf4j
@Api("菜品相关接口")
public class DishController {@AutowiredDishService dishService;@AutowiredRedisTemplate redisTemplate;@GetMapping("/list")@ApiOperation("根据分类id查询菜品")public Result<List<DishVO>> getByCategoryId(Long categoryId) {log.info("根据分类id查询菜品");String key = "dish:" + categoryId;List<DishVO> a = (List<DishVO>) redisTemplate.opsForValue().get(key);System.out.println(a);if (a != null && a.size() > 0) {return Result.success(a);}Dish dish = new Dish();dish.setCategoryId(categoryId);dish.setStatus(StatusConstant.DISABLE);a = dishService.listWithFlavor(dish);redisTemplate.opsForValue().set(key, a);return Result.success(a);}@PostMapping("/status/{status}")@ApiOperation("菜品起售停售")public Result startOrStop(@PathVariable Integer status, Long id) {dishService.startOrStop(status,id);cleanCache();return Result.success();}private void cleanCache() {Set set = redisTemplate.keys("dish:*");redisTemplate.delete(set);}
}

在startOrStop方法中,当执行菜品起售停售操作后,会调用 cleanCache  私有方法来清理 Redis 缓存。在 cleanCache  方法里,通过 Set set = redisTemplate.keys("dish:*");  利用 Redis 的 keys  命令获取所有以 "dish:"  开头的键值,也就是获取所有与菜品相关的缓存键,然后使用 redisTemplate.delete(set),将这些键对应的缓存数据全部删除。

这样可以确保在菜品状态发生改变后,缓存中的菜品数据能及时更新,避免前端获取到旧的不符合实际状态的菜品信息,从而保证了缓存数据与数据库数据的一致性。但是使用keys命令在生产环境中如果数据量很大可能会影响性能,因为它需要遍历所有键,可以考虑采用更精准的缓存失效策略,比如根据具体变更的菜品 id  来有针对性地删除相关缓存,而不是批量删除所有菜品缓存,也可以使用Spring Cache注解。

Spring Cache

  1. @EnableCaching:加在启动类上,用于开启缓存注解功能,使得项目中可以使用Spring Cache的其他注解。
  2. @Cacheable:放在方法上,在方法执行前先查询缓存中是否存在缓存数据,存在数据直接将数据返回;没有缓存数据,通过反射调用方法并将方法的返回值放到缓存中。
  3. @CachePut:将方法的返回值放到缓存中,通常用于在方法执行完毕后更新缓存中的数据。
  4. @CacheEvict:用于将一条或多条数据从缓存中删除,可以根据具体的 key 删除指定的缓存数据,也可以使用allEntries = true 删除整个缓存名称下的所有数据。

以下为使用spring cahce注解的代码:

@RestController
@RequestMapping("/admin/dish")
@Slf4j
@Api("菜品相关接口")
@EnableCaching
public class DishController {@AutowiredDishService dishService;@AutowiredRedisTemplate redisTemplate;@GetMapping("/list")@ApiOperation("根据分类id查询菜品")@Cacheable(cacheNames = "dishCache", key = "#categoryId")public Result<List<DishVO>> getByCategoryId(Long categoryId) {log.info("根据分类id查询菜品");Dish dish = new Dish();dish.setCategoryId(categoryId);dish.setStatus(StatusConstant.DISABLE);List<DishVO> a = dishService.listWithFlavor(dish);return Result.success(a);}@PostMapping("/status/{status}")@ApiOperation("菜品起售停售")@CacheEvict(cacheNames = "dishCache", allEntries = true)public Result startOrStop(@PathVariable Integer status, Long id) {dishService.startOrStop(status, id);return Result.success();}
}

这段代码使用@Cacheable(cacheNames = "dishCache", key = "#categoryId")  注解, cacheNames  指定了缓存的名称空间为 “dishCache”,用于将菜品相关的缓存数据统一归类管理,方便后续维护与排查问题。

key = "#categoryId"  则以传入的菜品分类 id作为缓存的键,使得在查询菜品时,系统能够依据分类 id  精准地在 “dishCache” 缓存区域中查找对应数据。当缓存中有匹配的数据时,直接返回缓存数据,不再执行方法体中的数据库查询代码,大大加快了响应速度。

http://www.khdw.cn/news/53608.html

相关文章:

  • 外汇网站怎么做优化百度广告怎么做
  • 网页制作公司武汉重庆seo推广服务
  • 纸牌网站建设新媒体口碑营销案例
  • 潍坊400建网站公司哈尔滨网络优化公司有哪些
  • 专业做网站app真假贵州seo技术查询
  • 网站上做树状框架图用什么软件网络营销项目
  • 药企网站怎么做上海sem
  • 如何建设网站济南兴田德润简介电话百度搜索app下载
  • html网站支付链接怎么做的seo推广软件排行榜前十名
  • 做网站设计工资多少钱网站推广的概念
  • 天将建设集团有限公司网站网络营销推广难做吗
  • 做建材的网站好名字seo在线短视频发布页
  • 国外网站做推广免费涨粉工具
  • 备案的网站有什么好处谷歌怎么投放广告
  • 怎么制作网站后台网络seo关键词优化技术
  • 上海闵行区网站制作公司免费推广软件下载
  • 白云区建网站深圳龙华区大浪社区
  • 国外免费外贸网站网络服务商主要包括
  • 嘉兴seo网站排名优化阿里指数数据分析平台
  • 在深圳做网站多少钱网络营销课程个人总结范文
  • 怎么样做网页设计seo排名啥意思
  • 成都品牌设计什么是seo标题优化
  • 做网站的品牌公司有哪些网站开发流程的8个步骤
  • 网站页头设计nba最新消息交易情况
  • 网站建设 怎么跑业务拉人注册给佣金的app
  • 怎么查询一个网站有没有做竞价关键词异地排名查询
  • 怎么用服务器搭建网站磁力搜索引擎哪个好
  • 企业官网优化福州seo网络推广
  • 有字库 wordpress 插件梅州seo
  • 网站建设公司网络营销理论基础