苍穹外卖Day05笔记
一、Redis 常用命令
1. 通用命令
keys pattern查找符合规则的 keyexists key判断 key 是否存在type key查看 key 对应值的类型del key删除指定 key
2. 字符串(String)
set key value设置键值对get key获取 valuesetex key seconds value设置并指定过期时间setnx key value不存在才设置(用于分布式锁)
3. 哈希(Hash)
hset key field value设置字段hget key field获取字段hdel key field删除字段hkeys key获取所有字段名hvals key获取所有字段值
4. 列表(List)
lpush key value1 value2从左边插入lrange key start stop获取范围内元素rpop key移除并获取最后一个元素llen key获取列表长度
5. 集合(Set)
sadd key member1 member2添加元素smembers key获取所有元素scard key获取元素个数sinter key1 key2求两个集合交集sunion key1 key2求两个集合并集srem key value删除指定元素
6. 有序集合(ZSet)
zadd key score member添加元素(带分数)zrange key start stop [withscores]按排名范围查询zincrby key increment member增加分数zrem key member删除元素
二、Swagger 优点
- 自动生成接口文档
代码写完,接口文档自动生成,无需手动编写。 - 接口信息清晰
包含接口地址、请求方式、参数、返回值、错误码等。 - 支持在线调试
可直接在页面发送请求、查看响应,方便前后端联调。 - 注解驱动,侵入低
使用@Api、@ApiOperation等注解即可,不影响业务逻辑。 - 统一接口规范
前后端共用一份文档,减少沟通歧义。 - 实时同步更新
代码修改后文档自动更新,避免文档过时。 - 支持环境控制
可在开发/测试环境开启,生产环境关闭。
三、Redis vs MySQL 对比
1. 核心差异对比表
| 维度 | Redis | MySQL |
|---|---|---|
| 存储类型 | 内存数据库(支持持久化) | 磁盘数据库(关系型) |
| 数据结构 | 支持字符串、哈希、列表、集合、有序集合等 | 基于表结构,支持关系(一对一/一对多等) |
| 读写性能 | 读写速度极快(内存操作) | 读写速度适中(磁盘IO) |
| 事务支持 | 弱事务(仅保证单命令原子性) | 强事务(ACID特性) |
| 数据一致性 | 最终一致性(分布式场景) | 强一致性 |
| 持久化方式 | RDB、AOF | 日志+磁盘存储 |
| 索引支持 | 简单索引(如有序集合分数索引) | 丰富索引(主键、唯一、联合、全文索引) |
| 查询能力 | 简单查询,支持少量聚合(交集/并集) | 复杂SQL查询(联表、分组、聚合等) |
2. 优缺点分析
Redis 优点
- 超高读写性能,单机QPS可达10万+;
- 支持丰富数据结构,适配多样业务场景;
- 支持过期策略、分布式锁,适配缓存/限流等场景;
- 支持集群部署,可水平扩展。
Redis 缺点
- 内存成本高,不适合存储海量数据;
- 事务能力弱,无法满足强事务要求;
- 复杂查询能力差,不支持联表等操作;
- 数据易丢失(内存存储,依赖持久化)。
MySQL 优点
- 支持复杂SQL查询和事务,满足业务逻辑要求;
- 磁盘存储成本低,可存储海量结构化数据;
- 强一致性,适配金融/订单等核心业务;
- 生态完善,工具链丰富(备份、监控等)。
MySQL 缺点
- 读写性能受磁盘IO限制,远低于Redis;
- 扩展复杂(分库分表成本高);
- 数据结构单一,仅支持表结构存储。
3. 适配场景
Redis 适配场景
- 缓存(热点数据:商品详情、用户信息);
- 计数器(点赞数、访问量、库存计数);
- 限流(接口限流、秒杀限流);
- 分布式锁(多服务并发控制);
- 消息队列(简单的生产消费场景);
- 排行榜(有序集合实现实时排名)。
MySQL 适配场景
- 核心业务数据存储(订单、用户、商品基础信息);
- 复杂业务逻辑查询(联表、分组统计);
- 强事务要求场景(支付、转账);
- 海量结构化数据存储(历史订单、日志)。
4. 协同使用场景
实际项目中(如苍穹外卖),二者通常协同使用:
- Redis 作为缓存,存储热点数据(如菜品列表),减轻MySQL压力;
- MySQL 存储核心数据(如订单、用户信息),保证数据一致性;
- 写操作先更MySQL,再更Redis(或删除缓存);读操作优先查Redis,未命中再查MySQL并回写Redis。
总结
- Redis 核心优势是高性能、丰富数据结构,适配缓存/限流/排行榜等场景,不适合海量存储和强事务;
- MySQL 核心优势是强事务、复杂查询、低成本存储,适配核心业务数据存储,性能是短板;
- 实际开发中二者协同,Redis 解决性能问题,MySQL 解决数据存储和业务逻辑问题。