在苍穹外卖项目的第五天,我们主要完成了店铺营业状态设置 功能,并系统学习了 Redis 的基础知识、数据类型、常用命令以及在 Java 项目中的使用方式。本文回顾核心内容,帮助在实际项目中灵活运用 Redis。
一、Redis 入门
1.1 什么是 Redis?
Redis 是一款基于内存 的Key-Value 结构数据库,具有以下特点:
-
高性能:数据存储在内存中,读写速度极快
-
适合存储热点数据:如热门商品、资讯、用户会话等
-
广泛应用:在缓存、分布式锁、计数器等场景中非常常见
1.2 Redis 下载与安装
Redis 提供 Windows 和 Linux 两个版本:
-
Windows 版 :绿色软件,解压即用
-
Linux 版 :需编译安装
Windows 版解压后目录结构如下:
redis-server.exe # 服务端
redis-cli.exe # 客户端
redis.windows.conf # 配置文件
1.3 Redis 服务启动与停止
-
启动服务:
bashredis-server.exe redis.windows.conf默认端口:
6379,按Ctrl + C停止服务。 -
客户端连接:
默认连接本机 6379 端口,也可指定参数:
bashredis-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 使用步骤
-
引入依赖
XML<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> -
配置 Redis 连接
yaml
spring: redis: host: localhost port: 6379 password: 123456 -
配置 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; } } -
使用 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,将为项目性能优化提供强大支持。

