Redis 简介
Redis(Remote Dictionary Server)是一个开源的、基于内存的数据结构存储系统,可以用作数据库、缓存和消息代理。它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等,并提供了丰富的操作命令。
什么是 Redis?
Redis 是一个高性能的键值对(Key-Value)数据库,它将所有数据存储在内存中,因此具有极快的读写速度。与传统的磁盘数据库不同,Redis 的内存存储特性使其成为缓存和实时数据处理的理想选择。
核心特点
- 内存存储:所有数据存储在内存中,读写速度极快
- 数据结构丰富:支持字符串、哈希、列表、集合、有序集合等多种数据结构
- 持久化:支持 RDB 和 AOF 两种持久化方式,保证数据安全
- 高可用:支持主从复制和哨兵模式,实现高可用
- 分布式:支持集群模式,实现数据分片和负载均衡
- 原子操作:所有操作都是原子性的,支持事务
Redis 的应用场景
1. 缓存
这是 Redis 最常见的应用场景,将热点数据存储在 Redis 中,减少数据库访问压力:
┌─────────┐ ┌─────────┐ ┌─────────┐
│ 客户端 │ ───> │ Redis │ ───> │ 数据库 │
└─────────┘ └─────────┘ └─────────┘
缓存层
典型场景:
- 用户会话缓存
- 商品信息缓存
- 页面片段缓存
- 查询结果缓存
2. 排行榜
利用 Redis 的有序集合(Sorted Set)实现实时排行榜:
用户积分排行榜:
1. 用户A: 10000 分
2. 用户B: 8500 分
3. 用户C: 7200 分
典型场景:
- 游戏积分排行
- 商品销量排行
- 热门话题排行
3. 计数器
利用 Redis 的原子递增操作实现各种计数功能:
文章阅读量: 12345
视频播放量: 67890
点赞数: 5678
典型场景:
- 文章阅读计数
- 视频播放计数
- 点赞/收藏计数
4. 分布式锁
利用 Redis 的原子操作实现分布式锁:
SET lock:resource "unique_value" NX PX 30000
典型场景:
- 秒杀系统库存控制
- 定时任务防重复执行
- 分布式事务协调
5. 消息队列
利用 Redis 的列表(List)和发布订阅(Pub/Sub)实现消息队列:
生产者 ───> [消息队列] ───> 消费者
Redis
典型场景:
- 异步任务处理
- 实时消息推送
- 日志收集处理
6. 社交网络
利用 Redis 的集合(Set)实现社交功能:
用户A的关注列表: {用户B, 用户C, 用户D}
用户A的粉丝列表: {用户E, 用户F}
共同关注: 用户A和用户B的共同好友
典型场景:
- 关注/粉丝系统
- 共同好友推荐
- 社交圈子
Redis 与其他数据库的对比
Redis vs Memcached
| 特性 | Redis | Memcached |
|---|---|---|
| 数据类型 | 丰富(字符串、哈希、列表等) | 仅字符串 |
| 持久化 | 支持 RDB、AOF | 不支持 |
| 集群 | 原生支持 | 需要客户端实现 |
| 线程模型 | 单线程 | 多线程 |
| 内存管理 | 更高效 | 简单 |
Redis vs MySQL
| 特性 | Redis | MySQL |
|---|---|---|
| 存储介质 | 内存 | 磁盘 |
| 读写速度 | 极快(微秒级) | 较慢(毫秒级) |
| 数据类型 | 键值对 | 关系型表 |
| 事务支持 | 基本支持 | 完整 ACID |
| 适用场景 | 缓存、实时数据 | 持久化存储 |
Redis 的优势
- 性能卓越:内存存储,读写速度可达 10万+ QPS
- 数据结构丰富:支持多种数据结构,满足各种业务需求
- 操作原子性:所有操作都是原子性的,保证数据一致性
- 功能丰富:支持事务、Lua 脚本、发布订阅等高级功能
- 生态完善:支持多种编程语言客户端,社区活跃
- 运维友好:提供丰富的监控命令和工具
Redis 的局限性
- 内存限制:数据量受限于内存大小
- 持久化风险:虽然支持持久化,但仍可能丢失数据
- 单线程模型:虽然 6.0 后引入多线程 IO,但核心命令仍是单线程
- 复杂查询受限:不支持复杂的关系型查询
Redis 版本演进与新特性
Redis 自 2009 年发布以来,不断演进发展。了解各版本的重要特性有助于选择合适的版本和规划升级策略。
主要版本里程碑
| 版本 | 发布时间 | 重要特性 |
|---|---|---|
| 1.0 | 2009 | 首次发布,基础数据类型 |
| 2.0 | 2010 | 虚拟内存、发布订阅 |
| 2.6 | 2012 | Lua 脚本、过期事件通知 |
| 2.8 | 2013 | 哨兵模式、部分重同步 |
| 3.0 | 2015 | Redis Cluster 集群 |
| 4.0 | 2017 | 模块系统、混合持久化、LFU 淘汰 |
| 5.0 | 2018 | Stream 数据类型 |
| 6.0 | 2020 | 多线程 I/O、ACL 访问控制、SSL/TLS |
| 6.2 | 2021 | 新增多个命令、函数功能 |
| 7.0 | 2022 | Functions、Multi-part AOF、ACL v2 |
| 7.2 | 2023 | Search 增强、中文分词改进 |
| 7.4 | 2024.10 | Hash 字段过期(HEXPIRE 系列命令) |
| 8.0 | 2025.05 | Vector Sets 原生数据类型、更多性能优化 |
Redis 7.0+ 核心新特性
Functions(函数)
Redis 7.0 引入了 Functions 来替代传统的 Lua 脚本管理方式。与 EVAL/EVALSHA 不同,Functions 持久化存储在 RDB/AOF 中,重启后仍然可用:
# 加载函数库
FUNCTION LOAD "#!lua name=mylib\nredis.register_function('myincr', function(keys, args) return redis.call('INCRBY', keys[1], args[1]) end)"
# 执行函数
FCALL myincr 1 mykey 10
Multi-part AOF
Redis 7.0 重构了 AOF 持久化机制,将单个 AOF 文件拆分为:
- Base AOF:重写时生成的基础快照
- Incremental AOF:增量日志文件
- Manifest File:文件清单
这大大降低了重写期间的内存压力。
ACL v2
Redis 7.0 升级了访问控制列表,支持基于选择器(Selectors)的多重权限规则:
# 创建具有多重权限的用户
ACL SETUSER app_user on >password ~cache:* +@all (~meta:* +@read)
# 对 cache:* 有全部权限,对 meta:* 只有读权限
Hash 字段过期(Redis 7.4)
期待已久的功能,允许为 Hash 中的单个字段设置过期时间:
HSET user:1001 name "张三" session "abc123"
HEXPIRE user:1001 1800 FIELDS 1 session # session 30分钟后过期
Vector Sets(Redis 8.0)
Redis 8.0 引入了原生向量数据类型,支持高效的相似性搜索:
# 添加向量
VADD products "0.5,0.3,0.8" prod_001 SETATTR '{"name":"Redis实战","price":89}'
# 相似性搜索
VSIM products "0.6,0.4,0.7" WITHSCORES COUNT 10
选择合适的版本
| 场景 | 推荐版本 | 理由 |
|---|---|---|
| 生产环境(稳定优先) | 7.2 LTS | 长期支持、bug 修复 |
| 需要向量搜索 | 8.0+ | 原生 Vector Sets |
| 需要字段过期 | 7.4+ | Hash 字段 TTL |
| 需要高安全性 | 7.0+ | ACL v2、TLS 增强 |
| 兼容旧系统 | 6.2 | 广泛部署、生态成熟 |
学习路线
本教程将带你从零开始学习 Redis,涵盖以下内容:
- 基础入门:安装配置、基本命令、数据类型
- 数据结构:深入理解各种数据结构及其应用
- 高级特性:事务、Lua 脚本、发布订阅
- 持久化:RDB 和 AOF 持久化机制
- 高可用:主从复制、哨兵模式
- 集群:Redis Cluster 集群部署
- 现代生态:Redis Stack 模块详解
- AI 应用:Vector Sets 向量搜索
- 实战应用:缓存设计、分布式锁、消息队列
小结
Redis 是一个功能强大、性能卓越的内存数据库,广泛应用于缓存、排行榜、计数器、分布式锁等场景。通过本教程的学习,你将掌握 Redis 的核心概念、数据结构、高级特性和实战应用,成为一名合格的 Redis 开发者。