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

相关推荐
Mr.朱鹏37 分钟前
Linux 服务器 LVM 根分区在线动态扩容
linux·服务器·数据库
摇滚侠40 分钟前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 数据库初始化机制 阅读笔记 36
数据库·spring boot·笔记
qiuhaipeng11 小时前
Claude code 升级后上下文长度变短问题
java·前端·数据库
wxwx_bscxy3222 小时前
基于Python新冠疫情可视化分析系统的设计与实现
java·数据库·spring boot·python·微信小程序·sqlite
剑之所向2 小时前
.NET 官方`System.Threading.Channels`
前端·javascript·数据库
词却3 小时前
数据库基础:DQL 数据查询语言
数据库·oracle
昌原的儿子LEO5 小时前
Linux IO多路复用与SQLite数据库核心知识点总结
linux·数据库·oracle
山岚的运维笔记5 小时前
mysql 专业笔记 -- 第 8 章:使用变量
运维·数据库·笔记·后端·学习·mysql·dba
聚美智数5 小时前
网安查询-备案查询-网络安全查询API接口介绍
网络·数据库·web安全
坐吃山猪6 小时前
【多线程】Semaphore使用
java·数据库·oracle·多线程