跳到主要内容

Redis 简介

Redis(Remote Dictionary Server)是一个开源的、基于内存的数据结构存储系统,可以用作数据库、缓存和消息代理。它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等,并提供了丰富的操作命令。

什么是 Redis?

Redis 是一个高性能的键值对(Key-Value)数据库,它将所有数据存储在内存中,因此具有极快的读写速度。与传统的磁盘数据库不同,Redis 的内存存储特性使其成为缓存和实时数据处理的理想选择。

核心特点

  1. 内存存储:所有数据存储在内存中,读写速度极快
  2. 数据结构丰富:支持字符串、哈希、列表、集合、有序集合等多种数据结构
  3. 持久化:支持 RDB 和 AOF 两种持久化方式,保证数据安全
  4. 高可用:支持主从复制和哨兵模式,实现高可用
  5. 分布式:支持集群模式,实现数据分片和负载均衡
  6. 原子操作:所有操作都是原子性的,支持事务

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

特性RedisMemcached
数据类型丰富(字符串、哈希、列表等)仅字符串
持久化支持 RDB、AOF不支持
集群原生支持需要客户端实现
线程模型单线程多线程
内存管理更高效简单

Redis vs MySQL

特性RedisMySQL
存储介质内存磁盘
读写速度极快(微秒级)较慢(毫秒级)
数据类型键值对关系型表
事务支持基本支持完整 ACID
适用场景缓存、实时数据持久化存储

Redis 的优势

  1. 性能卓越:内存存储,读写速度可达 10万+ QPS
  2. 数据结构丰富:支持多种数据结构,满足各种业务需求
  3. 操作原子性:所有操作都是原子性的,保证数据一致性
  4. 功能丰富:支持事务、Lua 脚本、发布订阅等高级功能
  5. 生态完善:支持多种编程语言客户端,社区活跃
  6. 运维友好:提供丰富的监控命令和工具

Redis 的局限性

  1. 内存限制:数据量受限于内存大小
  2. 持久化风险:虽然支持持久化,但仍可能丢失数据
  3. 单线程模型:虽然 6.0 后引入多线程 IO,但核心命令仍是单线程
  4. 复杂查询受限:不支持复杂的关系型查询

Redis 版本演进与新特性

Redis 自 2009 年发布以来,不断演进发展。了解各版本的重要特性有助于选择合适的版本和规划升级策略。

主要版本里程碑

版本发布时间重要特性
1.02009首次发布,基础数据类型
2.02010虚拟内存、发布订阅
2.62012Lua 脚本、过期事件通知
2.82013哨兵模式、部分重同步
3.02015Redis Cluster 集群
4.02017模块系统、混合持久化、LFU 淘汰
5.02018Stream 数据类型
6.02020多线程 I/O、ACL 访问控制、SSL/TLS
6.22021新增多个命令、函数功能
7.02022Functions、Multi-part AOF、ACL v2
7.22023Search 增强、中文分词改进
7.42024.10Hash 字段过期(HEXPIRE 系列命令)
8.02025.05Vector 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,涵盖以下内容:

  1. 基础入门:安装配置、基本命令、数据类型
  2. 数据结构:深入理解各种数据结构及其应用
  3. 高级特性:事务、Lua 脚本、发布订阅
  4. 持久化:RDB 和 AOF 持久化机制
  5. 高可用:主从复制、哨兵模式
  6. 集群:Redis Cluster 集群部署
  7. 现代生态:Redis Stack 模块详解
  8. AI 应用:Vector Sets 向量搜索
  9. 实战应用:缓存设计、分布式锁、消息队列

小结

Redis 是一个功能强大、性能卓越的内存数据库,广泛应用于缓存、排行榜、计数器、分布式锁等场景。通过本教程的学习,你将掌握 Redis 的核心概念、数据结构、高级特性和实战应用,成为一名合格的 Redis 开发者。

下一步