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

相关推荐
m0_743470372 小时前
使用Python进行PDF文件的处理与操作
jvm·数据库·python
Demon_Hao2 小时前
JAVA通过Redis实现Key分区分片聚合点赞、收藏等计数同步数据库,并且通过布隆过滤器防重复点赞
java·数据库·redis
掘根3 小时前
【微服务即时通讯】消息转发子服务
数据库·oracle
喜欢喝果茶.3 小时前
SQL 预处理
数据库·sql
数据科学小丫4 小时前
Python 数据存储操作_数据存储、补充知识点:Python 与 MySQL交互
数据库·python·mysql
Knight_AL4 小时前
Nacos 启动问题 Failed to create database ’D:\nacos\nacos\data\derby-data’
开发语言·数据库·python
xianjian09126 小时前
MySQL 的 INSERT(插入数据)详解
android·数据库·mysql
知识分享小能手6 小时前
MongoDB入门学习教程,从入门到精通,MongoDB入门指南 —— 知识点详解(2)
数据库·学习·mongodb
what_20186 小时前
PostgreSQL 索引
数据库·postgresql