键值型数据库 Redis
Redis 是一种速度非常快的数据库。
它最常见的角色,不是完全替代 MySQL,而是补充 MySQL,解决高频读写、缓存、状态保存这类问题。
本节目标
- 理解 Redis 是什么
- 理解 Redis 为什么快
- 理解 Redis 的常见数据类型
- 学会最基础的 Redis 命令
- 理解 Redis 在项目中的典型应用场景
Redis 最适合做什么
你可以先记住这些关键词:
- 缓存
- 登录状态
- 计数
- 排行榜
- 队列
- 高频读取
这些都属于 Redis 很擅长的场景。
Redis 为什么快
最核心的原因之一是:
- 它主要把数据放在内存里
内存读写速度比磁盘快很多,所以 Redis 非常适合“快进快出”的数据场景。
这也决定了它和 MySQL 的定位不一样。
Redis 的基本思维
MySQL 更像:
- 用表、行、列去管理结构化数据
Redis 更像:
- 用键和值去存数据
例如:
SET name python
GET name这里:
name是键python是值
最基础的命令
设置值
SET name python取值
GET name如果执行:
SET name python
GET name输出示例:
"python"删除
DEL name常见数据类型
1. String
最简单、最常见的数据类型。
SET site PythonSpace
GET site适合:
- 用户名
- 验证码
- 配置信息
- 缓存结果
2. List
适合存有顺序的一组数据。
LPUSH tasks task1
LPUSH tasks task2
LRANGE tasks 0 -1输出可能是:
1) "task2"
2) "task1"适合:
- 任务队列
- 消息列表
3. Hash
适合存“对象风格”的数据。
HSET user:1 name 小明 age 18 city 北京
HGETALL user:1你可以把它理解成:
- 一个用户对象
4. Set
集合会自动去重。
SADD tags python linux python
SMEMBERS tags输出结果里不会出现重复的 python。
适合:
- 去重记录
- 标签集合
5. Sorted Set
适合带分数排序的数据。
常见场景:
- 排行榜
- 热度榜
- 积分榜
过期时间
Redis 很适合存短时间有效的数据,例如验证码。
SET code 123456
EXPIRE code 60表示:
- 60 秒后自动过期
你也可能看到一步写法:
SETEX code 60 123456这在验证码和临时状态里非常常见。
Redis 和 MySQL 的区别
你可以先用最朴素的方式理解:
MySQL
更适合:
- 长期保存
- 结构稳定
- 关系明确
Redis
更适合:
- 高频读写
- 临时状态
- 缓存
- 队列
所以 Redis 不是“谁都能替代谁”,而是它们在项目中的职责不同。
Redis 在项目中的典型应用
1. 缓存
先查 Redis,没有再查数据库。
这能减少数据库压力。
2. 登录状态和会话信息
某些系统会把用户临时状态放到 Redis。
3. 计数
例如:
- 阅读量
- 点赞数
- 访问次数
4. 排行榜
有序集合非常适合这种场景。
5. 任务队列和去重
这在爬虫和异步任务里很常见。
一个完整小练习流程
你可以自己练一遍:
SET name pythonGET nameHSET user:1 name 小明 age 18HGETALL user:1LPUSH tasks task1LRANGE tasks 0 -1SADD tags python linux pythonSMEMBERS tags
只要这几步做顺了,Redis 的基本手感就有了。
常见错误
1. 只记命令,不理解场景
Redis 真正难的不是命令,而是判断:
- 什么数据适合放 Redis
2. 把 Redis 当成完全替代 MySQL 的数据库
它们定位不同。
3. 忘记 Redis 很适合“临时数据”
尤其是带过期时间的数据。
练习题
练习 1
用 SET 和 GET 保存并读取一个键值。
练习 2
用 Hash 保存一个用户对象。
练习 3
用 List 做一个最简单的任务列表。
练习 4
用 Set 体验去重效果。
练习 5
自己总结:
- Redis 为什么快
- Redis 最适合解决哪些问题
本节小结
Redis 最重要的,不是你会背多少命令,而是你知道它在项目里为什么存在。
你这一节最重要的收获应该是:
- 理解 Redis 是键值型数据库
- 理解它为什么快
- 会用几种常见数据类型
- 知道缓存、状态、计数、队列这些典型场景
只要这些基础打牢,后面你再用 Python 操作 Redis 或在爬虫中使用 Redis 时,就不会只是机械调用命令。