首页 > 数据库 >苍穹外卖 将菜品缓存到Redis

苍穹外卖 将菜品缓存到Redis

时间:2024-10-25 23:46:49浏览次数:3  
标签:缓存 Redis redis 查询 list 外卖 菜品 dish

        CategoryController,用户端查询分类id及其分类下对应的菜品,假如是第一次查询,那么就从数据库中查询并加入redis缓存中,若不是第一次查询,那么直接从redis中查询,不再查询数据库。

// redis缓存菜品,减少数据库的查询
// 在数据库中查找属于IO,假如有很多用户同时访问,那么查找效率将会变低,所以说要将菜品数据缓存在redis中,这样才方便调用
// 构造redis的逻辑:key就是分类的id,value是当前id下对应的菜品
@RestController("userDishController")
@RequestMapping("/user/dish")
@Slf4j
@Api(tags = "客户端-菜品浏览接口")
public class DIshController {
    @Autowired
    private DishService dishService;
    // 自动注入redis操作工具
    @Autowired
    private RedisTemplate redisTemplate;


    /**
     * 根据菜品分类id查询对于的菜品及其口味
     *
     * @param categoryId
     * @return
     */
    @GetMapping("/list")
    @ApiOperation("根据菜品分类查询对应菜品")
    public Result<List<DishVO>> list(Long categoryId) {
        // 构造redis中使用的key,规则:dish_分类id代表不同的菜品分类
        String key = "dish_" + categoryId;
        // 查询redis中是否查找当前key对应的菜品数据,将菜品数据封装为list集合返回
        List<DishVO> valueList = (List<DishVO>) redisTemplate.opsForValue().get(key);
        if (valueList != null && !valueList.isEmpty()) {
            // 若存在这个值,那么直接返回,无需查询数据库
            return Result.success(valueList);
        }
        // 若redis中不存在,那么查询数据库,并将其缓存在redis中
        Dish dish = new Dish();
        dish.setCategoryId(categoryId);
        // 查询在售状态中的菜品
        dish.setStatus(StatusConstant.ENABLE);
        List<DishVO> list = dishService.listWithFlavor(dish);
        // 将其缓存在redis中
        redisTemplate.opsForValue().set(key, list);
        return Result.success(list);
    }
    // 为了保持数据库中的数据和redis中缓存的数据保持一致,修改管理端的DishController的相关方法,每当数据发生变化,在管理端就要清除其缓存

}

 

标签:缓存,Redis,redis,查询,list,外卖,菜品,dish
From: https://blog.csdn.net/Aishangyuwen/article/details/143246229

相关文章

  • Redis 安装部署与基础学习
    Redis安装部署与学习一、简介Redis(RemoteDictionaryServer)是一个开源的内存数据库,遵守BSD协议,它提供了一个高性能的键值(key-value)存储系统,常用于缓存、消息队列、会话存储等应用场景。也就是说redis数据库与我们之前学的MySQL,ClickHouse都不一样,是一个非关系型数据库。总......
  • redis安装与部署
    一、下载1、华为镜像站下载https://mirrors.huaweicloud.com/redis/2、将下载的资料包上传到Linux中3、解压缩文件tar-zxvfredis-7.0.10.tar.gz4、安装gcc,和tclyuminstall-ygccyuminstall-ytcl5、进入解压目录执行下面的命令makeMALLOC=libc6、......
  • 易考八股文之Redis在你项目中怎么用,如果Redis宕机,应用服务还会响应吗?会造成哪些问题,如
    在项目中,Redis可以用于多种用途,例如:缓存数据:将经常访问的数据存储在Redis中,减少对后端数据库的查询压力,提高应用的响应速度。会话管理:存储用户会话信息,方便在分布式系统中管理用户登录状态等。如果Redis宕机,应用服务可能仍然会响应,但会面临一些问题:数据丢失:如果没有配置持久......
  • Redis高并发超时问题
     StackExchange.Redis驱动有个超时问题,并发比较高的时候就会出现类似以下错误,比如开3000个线程: StackExchange.Redis.RedisConnectionException:Itwasnotpossibletoconnecttotheredisserver(s).Errorconnectingrightnow.Toallowthismultiplexertocontin......
  • Redis
    常见面试题:Redis简介为什么要用Redis?Redis的优点Redis的应用场景LinuxCentos7安装Redis与Window10安装RedisRedis客户端介绍与使用Redis核心配置文件详解RedisKey命名规范Redis最常用的5种数据类型及其对应的命令Redis的性能测1什么是Redis?Redis是一个由C语言编......
  • actix_web操作redis
    tomlactix-web="4"redis={version="0.21.4",features=["r2d2"]}r2d2="0.8.9"r2d2_redis="0.14.0"uuid={version="0.8",features=["v4"]}with_r2d2.rsuseredis::Comm......
  • Redis运维常用命令(持续更新)
    查看连接clientlist身份认证authpassword获取慢查询##结果为查询ID、发生时间、运行时长和原命令默认10毫秒,默认只保留最后的128条。单线程的模型下,一个请求占掉10毫秒是件大事情,注意设置和显示的单位为微秒,注意这个时间是不包含网络延迟的。SLOWLOGGET10##获取慢......
  • SpringJpa事务和缓存
    背景,一个service,有一个方法serviceA里面调用两个update方法,一个findByName方法。其中serviceA和update方法上都上有@transactional注解,而findByName上没有。示例如下:servcieA{updateByName()updateById()findByName()}先说结论,这个时候具体事务的变化如下:serviceA本身会......
  • 场景题:百万数据插入Redis有哪些实现方案?
    在面试的过程当中,偶尔会遇到一些场景题,虽然这些场景题归根到底还是技术问题,但他通常比常规的八股题要稍微难一些,因为他考验的是你对于技术的整体理解、应用,以及变通的能力。那么今天咱们就来看一道,在面试中国平安时遇到的一道场景题:将百万数据插入到Redis,有哪些实现方案?1.Redis......
  • 如何将GB28181/GB35114流媒体监控视频汇聚平台LiveGBS中自带的redis组件换成自己的Red
    @目录1、Redis服务2、如何切换REDIS?2.1、停止启动REDIS2.2、配置信令服务2.3、配置流媒体服务2.4、启动3、搭建GB28181视频直播平台1、Redis服务在LivGBS中Redis作为数据交换、数据订阅、数据发布的高速缓存服务。默认LiveCMS解压目录下会携带一个REDIS服务。如果已经有自己的r......