苍穹外卖学习记录05-店铺营业状态设置

一、Redis入门

Redis是一种基于内存的key-value结构的数据库

Mysql是二维表结构的数据库

Redis基于内存,读写性能高

适用于存储热点数据(热点商品、资讯、新闻)

1.1 Redis 的基本数据类型

在Redistribution中,key是以String类型存储的,value有五种基本类型:字符串、哈希、列表、集合、有序集合。

1.2 Redis常用命令

1.2.1 字符串操作命令

 1.2.3 哈希操作命令

1.2.3列表操作命令

注意列表操作命令中如Lpush 中的‘L’不是list的意思,而是left的意思,表示从列表左侧对数据进行操作,RPOP命令同理,表示从列表右侧进行数据操作。

1.2.4 集合操作命令

 1.2.5 有序集合操作命令

1.2.6 通用命令

 二、在Java中使用Redis

Spring Date Redis 是spring的一部分,对Redis底层开发包进行了高度分装。

在spring项目中,可以使用Spring Date Redis简化操作。

 配置类:

2.1步骤

2.1.1 导入Maven依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

2.1.2 配置Redis数据源

yml文件:

  redis:
    host: ${sky.redis.host}
    port: ${sky.redis.port}
    database: ${sky.redis.database}

dev.yml文件:

  redis:
    host: localhost
    port: 6379
    database: 10

这里因为我redis没有设置密码,所以没有添加。

redis会默认生成16个数据库(0-15)database:10表示选择用10号数据库

2.1.3 编写配置类

package com.sky.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();
        //传入连接工厂
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //设置Redis key的序列化key
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        return redisTemplate;
    }
}

RedisTemplate提供的五种对不同数据类型操作的对象:

2.2 操作方法

2.2.1 对字符串String的操作

 2.2.2对哈希结构进行操作

 2.2.3 操作列表

 2.2.4 操作集合

2.2.5 操作有序集合

2.2.6 操作通用命令

 

 三、店铺营业状态设置

需要接口:

修改营业状态的接口

管理端查询营业状态的接口

用户端查询营业状态的接口

营业状态数据,使用Redis来存储。(若单纯为这一个字段创建一个表不划算)

代码开发

因为管理端和用户端的controller层中的类名相同,在spring boot中默认使用单例模式,spring会初始化一个controller对象,默认为类名小写。若两个类名相同,就需要在@RestController后面重新命名。

admin/controller层

package com.sky.controller.admin;

import com.sky.result.Result;
import io.swagger.annotations.Api;
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.security.Key;

@RestController("adminShopController")
@Slf4j
@RequestMapping("/admin/shop")
@Api(tags="店铺操作接口")
public class ShopController {
    public static final String KEY = "SHOP_STATUS";
    @Autowired
    RedisTemplate redisTemplate;
    /**
     * 修改店铺状态
     * @param status
     * @return
     */
    @PutMapping("/{status}")
    public Result setStatus(@PathVariable Integer status){
        log.info("店铺状态修改为:{}",status==1?"营业中":"已打烊");
        redisTemplate.opsForValue().set(KEY,status);
        return Result.success();
    }

    /**
     * 查询店铺状态
     * @return
     */
    @GetMapping("status")
    public Result<Integer> getStatus(){
        Integer shopStatus = (Integer) redisTemplate.opsForValue().get(KEY);
        log.info("查询到的店铺状态为:{}",shopStatus==1?"营业中":"已打烊");
        return Result.success(shopStatus);
    }

}

 user/controller层

package com.sky.controller.user;

import com.sky.result.Result;
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.*;

@RestController("userShopController")
@Slf4j
@RequestMapping("/user/shop")
@Api(tags = "店铺操作接口")
public class ShopController {
    public static final String KEY = "SHOP_STATUS";
    @Autowired
    RedisTemplate redisTemplate;
    /**
     * 查询店铺状态
     * @return
     */
    @GetMapping("/status")
    @ApiOperation("查询店铺状态")
    public Result<Integer> getStatus(){
        Integer shopStatus = (Integer) redisTemplate.opsForValue().get(KEY);
        log.info("查询到的店铺状态为:{}",shopStatus==1?"营业中":"已打烊");
        return Result.success(shopStatus);
    }

}

<think>好的,我需要处理用户关于苍穹外卖资料的请求。首先,用户提到了开发文档和技术讲义,但根据提供的引用内容,可能没有现成的公开文档。引用1介绍了项目的整体结构,引用2和3涉及环境配置和Redis命令,这些都是开发中的具体知识点。 接下来,我需要整理已有的信息,提供可行的获取途径。比如建议联系培训机构,查阅课程资料,GitHub搜索,或者参考提供的技术点。同时,要结合引用中的内容,给出具体的例子,比如环境配置和Redis的使用,这样回答会更具体。 还要注意用户可能无法直接访问内部资料,所以需要提供替代方案,如技术博客、问答社区等。此外,生成的相关问题需要围绕开发技术栈、部署流程、接口文档生成和Redis应用,这些都与已有的引用内容相关,确保问题有依据。 最后,检查回答是否符合格式要求,使用正确的中文表达,避免Markdown,并自然添加引用标识。确保每个建议都有对应的引用支持,比如环境配置引用2,Redis部分引用3,项目结构引用1。</think>根据现有资料,关于《苍穹外卖》项目的开发文档和技术讲义获取建议如下: ### 一、核心获取途径 1. **官方培训渠道** 建议联系课程提供方(如黑马程序员)获取完整技术文档,该项目作为教学案例通常配套开发指南[^1] 2. **课程配套资料** 通过培训课程获取以下资源: - 系统架构设计图 - 微服务模块划分文档 - 前后端接口规范文档 - 持续集成配置指南 3. **GitHub开源资源** 可尝试搜索关键词组合: ```bash # 推荐搜索关键词 苍穹外卖 site:github.com sky-takeout springcloud ``` ### 二、关键技术点参考 1. **环境配置规范**(来自引用[2]) ```java // Knife4j配置示例 @Bean public Docket docket() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.sky.controller")) // 关键扫描配置 .paths(PathSelectors.any()) .build(); } ``` 需配合静态资源映射配置才能正常访问接口文档[^2] 2. **Redis应用场景**(来自引用[3]) - 验证码存储:`SETEX code 300 1234` - 分布式锁:`SETNX lock_order 1` - 店铺状态缓存:`HSET shop_status 1 "营业中"` ### 三、替代资源建议 1. 技术博客:搜索"苍穹外卖 部署手册"、"苍穹外卖 架构解析" 2. 问答社区:查看CSDN/掘金等平台的开发者实践记录 3. 微服务组件文档: - Spring Cloud Alibaba 官方文档 - 微信小程序开发文档 - 阿里云OSS对接指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值