前言

在如今的互联网开发中,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 都能非常优雅地解决。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐