苍穹外卖 day05:店铺营业状态设置与Redis入门实战

在苍穹外卖项目的第五天,我们主要完成了店铺营业状态设置 功能,并系统学习了 Redis 的基础知识、数据类型、常用命令以及在 Java 项目中的使用方式。本文回顾核心内容,帮助在实际项目中灵活运用 Redis。


一、Redis 入门

1.1 什么是 Redis?

Redis 是一款基于内存Key-Value 结构数据库,具有以下特点:

  • 高性能:数据存储在内存中,读写速度极快

  • 适合存储热点数据:如热门商品、资讯、用户会话等

  • 广泛应用:在缓存、分布式锁、计数器等场景中非常常见

1.2 Redis 下载与安装

Redis 提供 Windows 和 Linux 两个版本:

Windows 版解压后目录结构如下:

复制代码
redis-server.exe   # 服务端
redis-cli.exe      # 客户端
redis.windows.conf # 配置文件

1.3 Redis 服务启动与停止

  • 启动服务

    bash 复制代码
    redis-server.exe redis.windows.conf

    默认端口:6379,按 Ctrl + C 停止服务。

  • 客户端连接

    默认连接本机 6379 端口,也可指定参数:

    bash 复制代码
    redis-cli -h 127.0.0.1 -p 6379 -a 123456
  • 设置密码 (修改 redis.windows.conf):

    复制代码
    requirepass 123456

    修改后需重启服务生效。


二、Redis 数据类型

Redis 中存储的是 Key-Value 结构,其中 Key 为字符串,Value 支持多种数据类型:

类型 说明
string 普通字符串,最基础的类型
hash 键值对集合,适合存储对象
list 有序列表,可重复,类似 LinkedList
set 无序集合,元素唯一
sorted set (zset) 有序集合,每个元素关联一个分数(score)

三、Redis 常用命令

3.1 字符串操作

命令 说明
SET key value 设置指定 key 的值
GET key 获取指定 key 的值
SETEX key seconds value 设置值并指定过期时间(秒)
SETNX key value 仅当 key 不存在时设置值

3.2 哈希操作

命令 说明
HSET key field value 设置哈希字段的值
HGET key field 获取哈希字段的值
HDEL key field 删除哈希字段
HKEYS key 获取所有字段名
HVALS key 获取所有字段值

3.3 列表操作

命令 说明
LPUSH key value1 [value2] 从左侧插入
LRANGE key start stop 获取指定范围元素
RPOP key 从右侧弹出
LLEN key 获取列表长度

3.4 集合操作

命令 说明
SADD key member1 [member2] 添加成员
SMEMBERS key 获取所有成员
SCARD key 获取成员数
SINTER key1 [key2] 交集
SUNION key1 [key2] 并集
SREM key member1 [member2] 删除成员

3.5 有序集合操作

命令 说明
ZADD key score1 member1 添加成员并指定分数
ZRANGE key start stop [WITHSCORES] 按索引范围获取
ZINCRBY key increment member 增加分数
ZREM key member 删除成员

3.6 通用命令

命令 说明
KEYS pattern 查找匹配的 key
EXISTS key 检查 key 是否存在
TYPE key 返回值的类型
DEL key 删除 key

四、在 Java 中操作 Redis

4.1 Redis 的 Java 客户端

常用的 Java Redis 客户端有:

  • Jedis:轻量级、同步

  • Lettuce:基于 Netty,支持异步

  • Spring Data Redis:Spring 官方封装,推荐在 Spring 项目中使用

4.2 Spring Data Redis 使用步骤

  1. 引入依赖

    XML 复制代码
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
  2. 配置 Redis 连接

    yaml

    复制代码
    spring:
      redis:
        host: localhost
        port: 6379
        password: 123456
  3. 配置 RedisTemplate----RedisConfiguration.java

    java 复制代码
    @Configuration
    public class RedisConfiguration {
        @Bean
        public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
            RedisTemplate redisTemplate = new RedisTemplate();
            redisTemplate.setKeySerializer(new StringRedisSerializer());
            redisTemplate.setConnectionFactory(redisConnectionFactory);
            return redisTemplate;
        }
    }
  4. 使用 RedisTemplate 操作数据

    • opsForValue():操作字符串

    • opsForHash():操作哈希

    • opsForList():操作列表

    • opsForSet():操作集合

    • opsForZSet():操作有序集合


五、店铺营业状态设置

5.1 需求分析与设计

  • 管理端:设置+查询 营业状态(营业 / 打烊)

  • 用户端:查询 当前营业状态

  • 存储方式 :使用 Redis 字符串存储,key 为 SHOP_STATUS,value 为 1(营业)或 0(打烊)

5.2 接口设计

功能 请求方式 路径
设置营业状态 PUT /admin/shop/{status}
管理端查询状态 GET /admin/shop/status
用户端查询状态 GET /user/shop/status

5.3 代码实现

管理端admin Controller
java 复制代码
@RestController("adminShopController")
@RequestMapping("/admin/shop")
@Api(tags = "店铺操作相关接口")
public class ShopController {

    public static final String KEY = "SHOP_STATUS";

    @Autowired
    private RedisTemplate redisTemplate;

    @PutMapping("/{status}")
    @ApiOperation("设置店铺营业状态")
    public Result<String> setStatus(@PathVariable Integer status) {
        redisTemplate.opsForValue().set(KEY, status);
        return Result.success();
    }

    @GetMapping("/status")
    @ApiOperation("查询店铺营业状态")
    public Result<Integer> getStatus() {
        Integer status = (Integer) redisTemplate.opsForValue().get(KEY);
        return Result.success(status);
    }
}
用户端user Controller
java 复制代码
@RestController("userShopController")
@RequestMapping("/user/shop")
@Api(tags = "店铺操作相关接口")
public class ShopController {

    public static final String KEY = "SHOP_STATUS";

    @Autowired
    private RedisTemplate redisTemplate;

    @GetMapping("/status")
    @ApiOperation("查询店铺营业状态")
    public Result<Integer> getStatus() {
        Integer status = (Integer) redisTemplate.opsForValue().get(KEY);
        return Result.success(status);
    }
}

5.4 功能测试

可以通过以下方式进行测试:

  • Swagger 接口文档:直接调用接口验证

  • 前后端联调:结合前端页面进行完整流程测试


六、总结

通过今天的学习,我们掌握了:

  • Redis 的基本概念、安装与使用

  • Redis 的常用数据类型与命令

  • 在 Spring Boot 项目中集成 Redis

  • 使用 Redis 实现店铺营业状态的设置与查询

Redis 的高性能和丰富的数据结构使其在缓存、状态管理、计数器等场景中非常实用。掌握 Redis,将为项目性能优化提供强大支持。

相关推荐
梁辰兴16 分钟前
软件工程:数据结构设计
数据库·软件工程·设计原则·设计方法·梁辰兴·数据库结构设计·数据库结构类型
AC赳赳老秦36 分钟前
风控岗应用:OpenClaw 采集公开司法与经营异常数据,自动生成企业风险评估报告
大数据·c语言·数据库·人工智能·python·php·openclaw
灯澜忆梦1 小时前
【MySQL18】进阶篇 | MySQL管理
数据库·mysql
zcmodeltech2 小时前
智能制造教学实训沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的工业机器人-智慧工厂-数字孪生全场景联动方案
数据库·stm32·嵌入式硬件·机器人·制造·多分类
AI多Agent协作实战派2 小时前
AI多Agent协作系统实战(四十):AI说“没有错误“,系统判了“测试失败“——一个正则的误判
数据库·人工智能
隔窗听雨眠3 小时前
OceanBase接入DeepSeek:数据库与AI的深度融合如何改写企业数据规则
数据库·人工智能·oceanbase
playboy1343 小时前
工作室 NAS 存储故障-办公室所有数据无法访问怎么办
数据库
byxdaz4 小时前
jeston平台交叉编译Poppler库与预览pdf文件
数据库
SilicoCode4 小时前
江科大STM32入门:FLASH闪存详解——从结构原理到读写保护
数据库·mongodb
谷哥的小弟4 小时前
腾讯云服务器安装Redis Stack图文教程
服务器·redis·腾讯云·redis stack