苍穹外卖 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,将为项目性能优化提供强大支持。

相关推荐
道法自然,人法天18 小时前
PostgreSQL安装与初始化教程(二进制压缩包)
数据库·postgresql
yzs8719 小时前
从Hydra到storage_engine:PostgreSQL列存引擎的性能跃迁与技术进化
数据库·postgresql
红云梦19 小时前
官方 Anthropic Postgres MCP Server 存在 SQL 注入漏洞 -- SafeDB 是如何做到 4 层防御的
数据库·sql
TDengine (老段)19 小时前
红有软件重构智能油田时序数据底座,支撑生产实时感知与设备预测性维护
大数据·数据库·人工智能·重构·时序数据库·tdengine
倒霉蛋小马19 小时前
【Redis】什么是缓存击穿?
数据库·redis·缓存
Jing_jing_X20 小时前
MCP (一)是什么?一文讲清 AI 如何连接现实世界
数据库·人工智能·oracle
阿凡观察站20 小时前
2026年工程项目管理软件推荐:这5款主流产品值得关注
大数据·数据库·低代码·finebi·简道云
逸Y 仙X20 小时前
文章二十一:ElasticSearch 词项查询与调度查询实战
java·大数据·数据库·elasticsearch·搜索引擎
李李李勃谦20 小时前
鸿蒙PCBI 报表工具:连接数据库与可视化报表生成
数据库·华为·交互·harmonyos
czlczl2002092521 小时前
MAX()和MIN()优化
数据库·mysql·性能优化