前言
在当下高并发、高性能的后端开发场景中,Redis 已经成为必备技能。无论是缓存、分布式锁、消息队列,还是排行榜、地理位置计算,Redis 都能轻松胜任。本文从零开始,带你全面掌握 Redis 核心知识:基础简介、八大常用数据结构、高频命令、实战场景,让你快速上手 Redis,轻松应对开发与面试。
一、Redis 数据库核心简介
Redis(Remote Dictionary Server)是一款开源、基于内存、高性能的非关系型键值对数据库,支持多种数据结构,自带持久化机制,读写速度可达 10w+ QPS,是后端服务的 "性能加速器"。
1. 核心特性
- 存储形式:唯一键 + 对应值(Key-Value),键全局唯一。
- 数据位置 :内存存储,保证极致读写速度;支持 RDB+AOF 持久化,数据落盘不丢失。
- 原子性:单命令原子操作,支持事务,保证并发安全。
- 丰富操作:支持数据增删改查、集合运算、自动排序、位运算等。
2. 核心应用场景
- 热点数据缓存(数据库查询结果、页面静态化内容)
- 用户会话存储(登录状态、购物车)
- 实时数据分析(计数、排序、统计)
- 轻量级消息队列、发布订阅系统
- 排行榜、分布式锁、地理位置服务、去重统计
二、Redis 通用命令(所有数据类型通用)
通用命令不区分数据结构,日常运维高频使用,生产环境慎用 KEYS 命令(全库遍历,阻塞主线程)。
表格
| 命令 | 作用 | 示例 |
|---|---|---|
| KEYS pattern | 匹配查找键 | KEYS user:* |
| DEL key [key...] | 删除键 | DEL user:1 product:1 |
| EXISTS key | 判断键是否存在 | EXISTS user:1 |
| EXPIRE key seconds | 设置键过期时间 | EXPIRE user:1 60 |
| TTL key | 查看键剩余过期时间 | TTL user:1 |
实操示例
# 设置测试数据
SET user:1 "张三"
SET product:1 "手机"
# 查找以 user: 开头的键
KEYS user:* # 返回 user:1
# 设置过期时间
EXPIRE user:1 30
# 查看剩余时间
TTL user:1 # 返回剩余秒数
三、Redis 八大数据结构 + 命令 + 实战场景
Redis 键(Key)默认是字符串,值(Value)支持多种类型,不同类型对应不同业务场景,下面逐一拆解。
1. String(字符串)------ 最基础数据类型
特性 :可存字符串、整数、浮点数、二进制文件(图片 / 视频),最大存储 512MB。 适用场景 :缓存、Token、分布式锁、计数器、库存。 常用命令
SET key value # 设置键值
GET key # 获取值
MSET k1 v1 k2 v2 # 批量设置
MGET k1 k2 # 批量获取
INCR key # 整数自增 1
INCRBY key 5 # 整数自增指定步长
SETNX key value # 键不存在时设置(分布式锁核心)
SETEX key 60 value # 设置带过期时间的键
实战:商品库存扣减、用户登录次数统计。
2. Hash(哈希)------ 存储对象神器
特性 :键 → 字段 - 值映射,类似 Java HashMap,支持字段级操作,无需序列化整个对象。 适用场景 :用户信息、商品详情、配置项。 常用命令
HSET key field value # 设置字段值
HGET key field # 获取单个字段
HMSET key f1 v1 f2 v2 # 批量设置字段
HMGET key f1 f2 # 批量获取字段
HGETALL key # 获取所有字段+值
HINCRBY key field 1 # 字段值自增
Python 实操
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
# 存储用户信息
r.hset("user:1", mapping={"name":"张三","age":20,"city":"合肥"})
# 获取所有信息
print(r.hgetall("user:1"))
3. List(列表)------ 双向链表
特性 :有序、可重复,头尾增删 O (1),支持阻塞读取。 适用场景 :消息队列、评论列表、点赞记录、任务队列。 常用命令
LPUSH key ele1 ele2 # 左侧插入
RPUSH key ele1 ele2 # 右侧插入
LPOP key # 左侧弹出
RPOP key # 右侧弹出
LRANGE key 0 -1 # 查询所有元素
BLPOP key 10 # 阻塞弹出,超时 10s
实战:简易消息队列,生产者 RPUSH,消费者 BLPOP。
4. Set(集合)------ 无序去重
特性 :元素唯一、无序,底层哈希表,支持交集 / 并集 / 差集。 适用场景 :好友关注、共同爱好、标签系统、抽奖。 常用命令
SADD key mem1 mem2 # 添加元素
SREM key mem # 删除元素
SMEMBERS key # 查看所有元素
SINTER key1 key2 # 求交集
SUNION key1 key2 # 求并集
SCARD key # 统计元素个数
实战:计算两个用户的共同关注好友。
5. Sorted Set(有序集合)------ 可排序的集合
特性 :元素唯一,按分数(score)自动排序,底层跳表 + 哈希表,查询 O (logN)。 适用场景 :排行榜、优先级队列、延时队列。 常用命令
ZADD key score mem # 添加元素+分数
ZRANK key mem # 升序排名
ZREVRANK key mem # 降序排名
ZRANGE key 0 9 # 取前 10 名
ZINCRBY key 5 mem # 增加分数
实战:游戏积分排行榜、商品销量排行。
6. Geospatial(地理空间)------LBS 服务
特性 :基于 Sorted Set 实现,存储经纬度,计算距离、范围查找。 适用场景 :附近的人、外卖配送、地图服务。 常用命令
GEOADD key lon lat mem # 添加地理位置
GEODIST key m1 m2 km # 计算距离(千米)
GEORADIUS key lon lat 5 km # 查找 5km 内元素
7. HyperLogLog------ 基数统计
特性 :固定内存(约 12KB),误差 0.81%,高效统计去重数量。 适用场景 :UV 统计、独立 IP 数、用户活跃数。 常用命令
PFADD key ele1 ele2 # 添加元素
PFCOUNT key # 统计基数
PFMERGE dest src1 src2 # 合并统计
8. Bitmap(位图)------ 位存储
特性 :按位存储 0/1,极致节省内存,适合布尔状态。 适用场景 :签到、在线状态、权限标记。 常用命令
SETBIT key offset 1 # 设置位
GETBIT key offset # 获取位
BITCOUNT key # 统计 1 的个数
四、Redis Key 命名规范(生产必备)
Redis 没有表概念,通过命名空间区分业务,避免键冲突,规范如下:
- 格式:
业务名:对象名:ID - 示例:
- 用户信息:
shop:user:1001 - 商品信息:
shop:product:1001
- 用户信息:
- 优势:清晰易读、方便批量管理、避免冲突。