Redis 从入门到实战:一篇文章彻底搞懂 Redis 核心知识
文章目录
前言
在如今的互联网开发中,Redis 几乎已经成为后端项目的标配。
无论是:
- 电商系统
- 社交平台
- 秒杀系统
- AI 应用
- 微服务架构
你都会看到 Redis 的身影。
很多初学者认为 Redis 只是一个“缓存工具”,但实际上 Redis 远远不止缓存这么简单。
它不仅拥有极高的性能,还支持丰富的数据结构,并且可以实现:
- 缓存系统
- 分布式锁
- 排行榜
- 消息队列
- GEO 地理位置
- 用户签到
- 热搜系统
甚至在很多高并发系统中,Redis 已经成为核心组件。
本文将结合你的文档内容,对 Redis 进行一次系统性的讲解,从基础概念到开发实战,帮助你真正理解 Redis。
一、什么是 Redis
Redis(Remote Dictionary Server)本质上是一个基于内存的 Key-Value 数据库,属于 NoSQL 数据库的一种。
NoSQL(Not Only SQL)指的是非关系型数据库。
常见的 NoSQL 数据库:
| 类型 | 数据库 |
|---|---|
| K-V 数据库 | Redis |
| 文档数据库 | MongoDB |
| 搜索引擎 | Elasticsearch |
| 列族数据库 | HBase |
| 图数据库 | Neo4j |
相比传统 MySQL,Redis 更加注重:
- 高性能
- 高并发
- 低延迟
- 灵活的数据结构
Redis 的核心特点:
1.数据存储在内存中
2.读写速度极快
3.支持丰富数据结构
4.支持持久化
5.支持主从复制
6.支持集群
7.支持分布式场景
Redis 官网:
Redis 官方网站
二、Redis 为什么这么快
Redis 的性能极其恐怖。
单机 Redis 可以轻松达到:
10W+ QPS
而普通数据库往往很难达到这个级别。
Redis 快的原因主要有以下几点。
1.基于内存操作
Redis 最大特点:
数据存储在内存中。
内存访问速度远远快于磁盘:
内存:纳秒级
磁盘:毫秒级
因此 Redis 的读取速度非常快。
这也是 Redis 性能高的根本原因。
2.单线程模型
很多人第一次学习 Redis 时会疑惑:
“单线程为什么还能这么快?”
实际上 Redis 的瓶颈并不在 CPU。
而在:
网络 IO
单线程反而有很多优势:
- 没有线程切换
- 没有锁竞争
- 没有上下文切换
- 不会出现死锁
因此 Redis 在高并发场景下依然表现优秀。
3.IO 多路复用
Redis 使用 IO 多路复用机制。
常见实现:
- select
- poll
- epoll
它可以让一个线程同时监听多个客户端连接。
因此 Redis 即使是单线程,也能处理大量请求。
4.高效的数据结构
Redis 内部实现了大量高性能数据结构:
- SDS 动态字符串
- HashTable
- QuickList
- SkipList
- ListPack
这些结构都是专门为高性能场景设计的。
三、Redis 基础使用
Redis 启动:
# 启动 Redis 服务
./redis-server ./redis.conf
# 连接 Redis
./redis-cli -p 6379
Redis 清空数据库:
# 清空当前数据库
FLUSHDB
# 清空所有数据库
FLUSHALL
常见 Redis 可视化工具:
- Redis Desktop
- DataGrip
四、Redis 五大核心数据结构
Redis 最核心的内容,就是数据结构。
真正掌握 Redis,必须理解:
什么数据结构
适合什么业务
1.String(字符串)
String 是 Redis 最基础的数据结构。
底层采用:
SDS(Simple Dynamic String)
实现。
特点:
- 最简单的 Key-Value
- 支持数字原子操作
- 最大支持 512MB
适用场景:
- 缓存
- Session
- Token
- 分布式锁
- 计数器
String 常用命令
# 设置键值
SET key value
# 获取值
GET key
# 批量设置
MSET k1 v1 k2 v2
# 批量获取
MGET k1 k2
# 删除 key
DEL key
# 判断 key 是否存在
EXISTS key
# 查看 key 类型
TYPE key
数值操作
Redis 的数值操作具有原子性。
非常适合:
- 阅读量
- 点赞数
- 库存系统
# 自增
INCR key
# 自减
DECR key
# 增加指定值
INCRBY key increment
# 减少指定值
DECRBY key decrement
# 增加浮点数
INCRBYFLOAT key increment
例如:
INCR article:1001:view
文章访问一次自动 +1。
过期时间操作
Redis 的缓存核心就在于 TTL。
# 设置过期时间(秒)
EXPIRE key seconds
# 设置毫秒过期时间
PEXPIRE key milliseconds
# 查看剩余时间
TTL key
# 查看毫秒剩余时间
PTTL key
# 删除过期时间
PERSIST key
SET 扩展命令
# key不存在才设置
SETNX key value
# 设置值并设置过期时间
SETEX key seconds value
# 毫秒级过期
PSETEX key milliseconds value
Redis 分布式锁核心:
SET lock_key uuid NX EX 30
这是面试高频问题。
2.Hash(哈希)
Hash 特别适合存储对象。
结构:
key -> field -> value
例如:
user:1
name -> zhangsan
age -> 20
相比 String 存 JSON:
Hash 更节省空间。
适用场景:
- 用户信息
- 商品详情
- 购物车
Hash 常用命令
# 设置字段
HSET key field value
# field不存在才设置
HSETNX key field value
# 批量设置
HMSET key field value field value
# 获取字段
HGET key field
# 批量获取
HMGET key field field
# 获取全部字段和值
HGETALL key
Hash 查询命令
# 获取所有 field
HKEYS key
# 获取所有 value
HVALS key
# 获取字段数量
HLEN key
# 判断字段是否存在
HEXISTS key field
Hash 删除与数值
# 删除字段
HDEL key field
# 字段数值增加
HINCRBY key field increment
# 字段浮点数增加
HINCRBYFLOAT key field increment
3.List(列表)
Redis List 本质是双向链表。
特点:
- 有序
- 可重复
- 双端插入效率高
底层:
quicklist + listpack
适用场景:
- 消息队列
- 时间线
- 评论列表
- 最新动态
List 常用命令
# 左插入
LPUSH key value
# 右插入
RPUSH key value
# 左弹出
LPOP key
# 右弹出
RPOP key
List 查询命令
# 获取范围元素
LRANGE key start stop
# 获取长度
LLEN key
# 获取指定位置元素
LINDEX key index
# 修改指定位置元素
LSET key index value
阻塞队列
Redis 可以实现简单 MQ。
# 左阻塞弹出
BLPOP key timeout
# 右阻塞弹出
BRPOP key timeout
当队列为空时:
消费者会一直等待消息。
4.Set(集合)
Set 最大特点:
无序
唯一
适合:
- 去重
- 点赞
- 标签系统
- 好友关系
Set 常用命令
# 添加元素
SADD key member
# 删除元素
SREM key member
# 获取全部元素
SMEMBERS key
# 获取元素数量
SCARD key
# 判断元素是否存在
SISMEMBER key member
随机操作
# 随机获取元素(不删除)
SRANDMEMBER key
# 随机弹出元素
SPOP key
集合运算
Redis 社交系统核心。
# 交集
SINTER key1 key2
# 并集
SUNION key1 key2
# 差集
SDIFF key1 key2
例如:
- 共同好友
- 推荐好友
- 共同关注
都可以使用集合运算实现。
5.ZSet(有序集合)
ZSet 是 Redis 企业开发中最重要的数据结构之一。
特点:
- 元素唯一
- 自动按 score 排序
底层:
SkipList + HashTable
适用场景:
- 排行榜
- 热搜榜
- 游戏积分排行
- 延时队列
ZSet 常用命令
# 添加元素
ZADD key score member
# 删除元素
ZREM key member
# 获取分数
ZSCORE key member
# 增加分数
ZINCRBY key increment member
# 获取元素数量
ZCARD key
排序查询
# 正序查询
ZRANGE key start stop
# 倒序查询
ZREVRANGE key start stop
# 返回分数
ZRANGE key start stop WITHSCORES
排名查询
# 升序排名
ZRANK key member
# 降序排名
ZREVRANK key member
排行榜系统基本都依赖 ZSet。
五、Redis 高级数据结构
除了五大核心结构,Redis 还提供了很多高级功能。
1.Bitmap(位图)
Bitmap 本质是 String 的位操作。
特点:
- 极其省内存
- 位级别操作
适用场景:
- 用户签到
- 在线状态统计
Bitmap 常用命令
# 设置某一位
SETBIT key offset value
# 获取某一位
GETBIT key offset
# 统计1的数量
BITCOUNT key
# 查找0或1的位置
BITPOS key bit
2.HyperLogLog
Redis 的概率统计算法。
特点:
占用内存极小
允许少量误差
适用场景:
- 网站 UV
- 独立访客统计
HyperLogLog 命令
# 添加元素
PFADD key value
# 统计数量
PFCOUNT key
# 合并
PFMERGE destkey sourcekey
3.GEO(地理位置)
Redis 可以存储经纬度。
适用场景:
- 附近的人
- 外卖距离计算
- 打车系统
GEO 常用命令
# 添加坐标
GEOADD key longitude latitude member
# 获取经纬度
GEOPOS key member
# 计算距离
GEODIST key member1 member2 KM
附近搜索
# 经纬度附近搜索
GEORADIUS key longitude latitude radius KM
# 根据地点搜索附近
GEOSEARCH key FROMMEMBER member
4.Stream
Redis 官方消息队列。
支持:
- 消费组
- 消息回溯
- 消息堆积
Stream 常用命令
# 添加消息
XADD key * field value
# 删除消息
XDEL key id
# 获取长度
XLEN key
# 查询消息
XRANGE key start end
消费者组
# 创建消费者组
XGROUP CREATE mystream groupA 0
# 消费消息
XREADGROUP GROUP groupA consumer1 STREAMS mystream >
# 查看消费进度
XPENDING mystream groupA
六、Redis 在真实项目中的应用
Redis 最大价值:
并不是“存数据”。
而是:
解决高并发问题
1.缓存系统
Redis 最核心用途。
经典流程:
请求
↓
查询 Redis
↓
命中直接返回
↓
未命中查询 MySQL
↓
写入 Redis
↓
返回结果
作用:
- 降低数据库压力
- 提升系统性能
2.分布式锁
Redis 可以实现分布式锁。
核心命令:
SET lock_key uuid NX EX 30
适用场景:
- 秒杀系统
- 防止重复提交
- 库存扣减
3.排行榜
ZSet 天然适合排行榜。
ZINCRBY game_rank 10 user1
实时更新积分。
4.消息队列
Redis List 与 Stream 都能实现 MQ。
适合:
- 异步任务
- 日志处理
- 系统解耦
七、Redis 持久化与高可用
很多人以为 Redis 数据断电就没了。
实际上 Redis 支持持久化。
1.RDB
RDB 本质:
数据快照
优点:
- 文件小
- 恢复速度快
缺点:
可能丢失最后一次快照后的数据。
2.AOF
AOF 会记录每条写命令。
优点:
- 数据更安全
- 可读性强
缺点:
- 文件更大
- 恢复速度较慢
3.主从复制
结构:
Master
↓
Slave
作用:
- 数据备份
- 读写分离
- 提高并发能力
4.Redis Cluster
当单机 Redis 性能不足时:
就需要 Redis 集群。
作用:
- 横向扩容
- 高可用
- 分布式存储
这是大型互联网项目标准方案。
八、总结
Redis 之所以强大,并不仅仅因为它“快”。
更重要的是:
Redis 提供了大量高性能的数据结构,可以帮助开发者快速解决复杂业务问题。
学习 Redis 时,真正需要掌握的是:
1.数据结构
2.底层原理
3.命令体系
4.业务场景
5.高并发思想
建议学习路线:
String
→ Hash
→ List
→ Set
→ ZSet
→ 持久化
→ 主从复制
→ 集群
→ Redis 实战
当你真正掌握 Redis 后,你会发现:
很多高并发系统问题,Redis 都能非常优雅地解决。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)