掌握 Redis:从安装到实战的菜鸟指南 – wiki词典

掌握 Redis:从安装到实战的菜鸟指南

前言:什么是 Redis?

欢迎来到 Redis 的世界!Redis (Remote Dictionary Server) 是一个开源的、使用 C 语言编写的、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库。它以其惊人的速度和灵活性而闻名,是现代 Web 应用开发中不可或缺的工具之一。

为什么选择 Redis?

  • 极高的性能:Redis 将数据存储在内存中,读写速度非常快,能够支持每秒数十万次的读写操作。
  • 丰富的数据类型:不仅仅是简单的字符串,Redis 支持列表(Lists)、集合(Sets)、有序集合(Sorted Sets)、哈希(Hashes)等多种数据结构。
  • 原子操作:所有 Redis 的操作都是原子性的,这意味着要么执行成功,要么不执行,这保证了数据的一致性。
  • 持久化:Redis 支持将内存中的数据保存到磁盘中,防止服务器重启后数据丢失。
  • 多样的应用场景:从缓存、消息队列到排行榜、实时计数器,Redis 都能大显身手。

本指南将带你从零开始,一步步安装、配置并实战 Redis,让你从一个彻底的菜鸟成长为能够熟练运用 Redis 的开发者。

第一章:安装 Redis

Redis 官方主要支持类 Unix 系统(如 Linux 和 macOS),在 Windows 上可以通过 WSL (Windows Subsystem for Linux) 或 Docker 来安装。

在 Linux (Ubuntu) 上安装

在 Ubuntu 系统上安装 Redis 非常简单:

“`bash

更新软件包列表

sudo apt update

安装 redis-server

sudo apt install redis-server

启动 Redis 服务

sudo systemctl start redis-server

设置开机自启

sudo systemctl enable redis-server

验证 Redis 是否正在运行

redis-cli ping
“`

如果返回 PONG,恭喜你,Redis 已经成功安装并运行了!

在 macOS 上安装

推荐使用 Homebrew 来安装 Redis:

“`bash

安装 Homebrew (如果尚未安装)

/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”

使用 Homebrew 安装 Redis

brew install redis

启动 Redis 服务

brew services start redis

验证 Redis 是否正在运行

redis-cli ping
“`

同样,看到 PONG 就代表成功了。

在 Windows 10/11 上安装 (通过 WSL 2)

Windows 用户推荐使用 WSL 2 (Windows Subsystem for Linux) 来获得原生的 Linux 环境。

  1. 安装 WSL 2:
    打开 PowerShell (管理员权限) 并运行:
    powershell
    wsl --install

    这会自动安装 Ubuntu 发行版。安装完成后,重启电脑。

  2. 在 WSL 中安装 Redis:
    启动你的 Ubuntu (在开始菜单中找到它),然后按照上面 在 Linux (Ubuntu) 上安装 的步骤操作即可。

第二章:Redis 基础操作

redis-cli 是 Redis 的命令行交互工具,是你与 Redis 打交道的主要方式。

连接与测试

  • 连接本地服务:直接在终端输入 redis-cli
  • 连接远程服务redis-cli -h <host> -p <port>
  • 测试连接ping 命令,如果服务正常,会返回 PONG
  • 退出 CLI:输入 exitquit

核心命令:Key-Value 操作

Redis 是一个 Key-Value 数据库,最基础的操作就是设置 (SET) 和获取 (GET) 值。

  • 设置值 (SET)
    redis
    SET user:name "Alice"

    这将一个键 user:name 的值设置为 "Alice"。如果成功,Redis 会返回 OK

  • 获取值 (GET)
    redis
    GET user:name

    返回 "Alice"。如果键不存在,则返回 (nil)

  • 删除键 (DEL)
    redis
    DEL user:name

    删除一个或多个键。

  • 检查键是否存在 (EXISTS)
    redis
    EXISTS user:name

    如果存在返回 1,否则返回 0

  • 设置过期时间 (EXPIRE)
    让一个键在指定秒数后自动删除,这对于缓存场景至关重要。
    “`redis
    SET session:token “xyz123”
    EXPIRE session:token 3600 # 1小时后过期

    或者在设置时直接指定过期时间

    SETEX session:token 3600 “xyz123”
    “`

第三章:探索 Redis 的数据类型

Redis 的强大之处在于其丰富的数据类型。

1. 字符串 (Strings)

这是最基本的数据类型,可以存储任何形式的字符串,包括文本、序列化的 JSON 或二进制数据。最大能存储 512MB。

常用命令: SET, GET, INCR (原子自增), DECR (原子自减), STRLEN (获取长度)。

应用场景: 缓存用户信息、计数器(文章阅读数、点赞数)。

“`redis

计数器

INCR page:views:article_101
GET page:views:article_101
“`

2. 列表 (Lists)

一个字符串元素的集合,按照插入顺序排序。你可以从列表的头部(左边)或尾部(右边)添加/弹出元素。

常用命令: LPUSH, RPUSH, LPOP, RPOP, LRANGE (获取范围内的元素)。

应用场景: 消息队列、最新动态(Timeline)。

“`redis

简单的消息队列

LPUSH tasks “send_email_to_user_1”
LPUSH tasks “process_payment_for_order_2”

消费者处理任务

RPOP tasks
“`

3. 哈希 (Hashes)

哈希是键值对的集合,非常适合用来存储对象。

常用命令: HSET, HGET, HGETALL (获取所有键值对), HDEL

应用场景: 存储结构化数据,如一个用户的多个字段。

redis
HSET user:1001 name "Bob" email "[email protected]" age 30
HGET user:1001 name
HGETALL user:1001

4. 集合 (Sets)

无序的、不重复的字符串元素集合。

常用命令: SADD, SREM (移除), SMEMBERS (获取所有成员), SISMEMBER (判断是否是成员), SINTER (交集), SUNION (并集)。

应用场景: 标签(Tags)、共同好友。

“`redis

为文章添加标签

SADD article:101:tags “redis” “database” “nosql”

获取文章的所有标签

SMEMBERS article:101:tags
“`

5. 有序集合 (Sorted Sets)

与集合类似,但每个元素都会关联一个 double 类型的分数(score)。Redis 正是通过分数来为集合中的成员进行从小到大的排序。

常用命令: ZADD, ZREM, ZRANGE (按分数范围获取), ZREVRANGE (按分数倒序获取), ZRANK (获取排名)。

应用场景: 排行榜、带权重的任务队列。

“`redis

游戏玩家积分排行榜

ZADD leaderboard 1500 “player1”
ZADD leaderboard 2300 “player2”
ZADD leaderboard 1800 “player3”

获取排名前2的玩家

ZREVRANGE leaderboard 0 1 WITHSCORES
“`

第四章:Redis 实战场景

场景一:使用 Redis 作为缓存

这是 Redis 最常见的用途。通过将热点数据(如数据库查询结果、计算结果)缓存在 Redis 中,可以极大减轻数据库的压力,提升应用性能。

伪代码示例 (Python):

“`python
def get_user_info(user_id):
# 1. 先从 Redis 缓存中获取
cached_data = redis.get(f”user:{user_id}”)
if cached_data:
print(“Hit cache!”)
return json.loads(cached_data)

# 2. 如果缓存未命中,从数据库查询
print("Miss cache, querying DB...")
db_data = query_database(f"SELECT * FROM users WHERE id = {user_id}")

# 3. 将查询结果存入 Redis,并设置过期时间
if db_data:
    redis.setex(f"user:{user_id}", 3600, json.dumps(db_data))

return db_data

“`

场景二:实现分布式会话存储

在分布式系统中,多台服务器需要共享用户的登录状态。将 Session 数据存储在 Redis 中,可以让任何一台服务器都能验证用户的会话。

  1. 用户登录成功后,生成一个唯一的 session_id
  2. 将用户信息(如 user_id, role)存入 Redis 的一个 Hash 中,键为 session:<session_id>
  3. 设置一个合理的过期时间,例如 24 小时。
  4. session_id 返回给客户端(通常存在 Cookie 中)。
  5. 用户后续的每个请求,都携带 session_id。服务器通过查询 Redis 来验证会话的有效性。

场景三:构建实时排行榜

利用 Sorted Set 的特性,可以轻松构建实时更新的排行榜。

  • : leaderboard:daily:2025-12-23
  • 成员: player_id
  • 分数: player_score

当玩家获得分数时,使用 ZADDZINCRBY (增加分数) 来更新排行榜。

“`redis

玩家 “noob” 获得了 50 分

ZINCRBY leaderboard:daily:2025-12-23 50 “noob”
“`

使用 ZREVRANGE 即可轻松获取 Top N 玩家列表。

第五章:Redis 的数据持久化

为了防止数据丢失,Redis 提供了两种持久化机制:

  1. RDB (Redis Database)

    • 工作方式:在指定的时间间隔内,将内存中的数据集快照写入磁盘。
    • 优点:生成的文件紧凑,非常适合备份和灾难恢复;恢复速度快。
    • 缺点:如果 Redis 意外宕机,会丢失最后一次快照之后的所有修改。
  2. AOF (Append Only File)

    • 工作方式:以日志的形式,记录每一个写操作命令。Redis 重启时,会重新执行 AOF 文件中的命令来恢复数据。
    • 优点:数据安全性更高,最多只会丢失 1 秒的数据(取决于同步策略)。
    • 缺点:AOF 文件通常比 RDB 文件大;恢复速度相对较慢。

如何选择?

  • 如果能接受少量数据丢失,追求最佳性能,可以选择 RDB。
  • 如果需要更高的数据安全性,AOF 是更好的选择。
  • 官方推荐:同时开启 RDB 和 AOF。这样既能保证数据安全,又能利用 RDB 进行快速恢复和备份。

结语

恭喜你!你已经完成了 Redis 的入门之旅。从安装、基本命令,到核心数据结构和实战场景,你已经掌握了使用 Redis 的基础知识。

但 Redis 的世界远不止于此,还有很多高级主题等待你去探索,例如:

  • 发布/订阅 (Pub/Sub)
  • 事务 (Transactions)
  • Lua 脚本 (Scripting)
  • Redis 集群 (Cluster)

不断实践,将 Redis 应用到你的项目中,是成为高手的唯一途径。希望这篇指南能为你打开一扇通往高性能世界的大门。祝你编码愉快!

滚动至顶部