从历史到实战,系统了解高性能内存数据库 Redis
-
- [1. Redis 概述与历史](#1. Redis 概述与历史)
-
- [1.1 什么是 Redis](#1.1 什么是 Redis)
- [1.2 核心特性](#1.2 核心特性)
- [1.3 发展历史](#1.3 发展历史)
- [2. Ubuntu 环境下安装 Redis](#2. Ubuntu 环境下安装 Redis)
-
- [2.1 环境准备](#2.1 环境准备)
- [2.2 方式一:APT 包管理器安装(推荐新手)](#2.2 方式一:APT 包管理器安装(推荐新手))
- [2.3 方式二:官方仓库安装(推荐生产环境)](#2.3 方式二:官方仓库安装(推荐生产环境))
- [2.4 方式三:源码编译安装](#2.4 方式三:源码编译安装)
- [2.5 启动与管理](#2.5 启动与管理)
- [2.6 验证安装](#2.6 验证安装)
- [2.7 基础配置调整](#2.7 基础配置调整)
- [3. Redis 重要文件及作用](#3. Redis 重要文件及作用)
- [4. Redis 命令行客户端](#4. Redis 命令行客户端)
- [5. Redis 使用场景](#5. Redis 使用场景)
- [6. 总结](#6. 总结)
1. Redis 概述与历史
1.1 什么是 Redis
Redis(Re mote Di ctionary Server)是一个开源的、基于内存的键值对(Key-Value)存储系统,使用 C 语言编写,支持网络、可基于内存亦可持久化,并提供多种语言的 API。
Redis 是目前最流行的 NoSQL 数据库之一,以其极高的性能和丰富的数据结构支持而著称。
1.2 核心特性
| 特性 | 说明 |
|---|---|
| 高性能 | 纯内存操作,读写速度可达 10 万+ QPS |
| 丰富的数据结构 | String、List、Hash、Set、Sorted Set、Bitmap、HyperLogLog、GEO、Stream 等 |
| 持久化 | 支持 RDB 快照和 AOF 日志两种持久化方式 |
| 高可用 | 支持主从复制、哨兵模式、Cluster 集群 |
| 原子性 | 所有操作都是原子性的,支持事务 |
| 发布订阅 | 内置 Pub/Sub 消息系统 |
| Lua 脚本 | 支持 Lua 脚本扩展 |
1.3 发展历史
| 时间 | 里程碑 |
|---|---|
| 2009 年 | Salvatore Sanfilippo(网名 antirez)为解决其初创公司 LLOOGG 的性能瓶颈,开发了 Redis 的原始版本 |
| 2010 年 | Redis 1.0 正式发布,VMware 赞助开发 |
| 2011 年 | Redis 2.0 发布,引入虚拟内存(后被废弃) |
| 2012 年 | Redis 2.6 发布,支持 Lua 脚本 |
| 2013 年 | Redis 2.8 发布,引入 Sentinel 哨兵高可用方案 |
| 2015 年 | Redis 3.0 发布,正式支持 Redis Cluster 集群 |
| 2017 年 | Redis 4.0 发布,引入模块系统、混合持久化 |
| 2018 年 | Redis 5.0 发布,引入 Stream 数据类型 |
| 2020 年 | Salvatore Sanfilippo 宣布退出 Redis 维护,由 Redis Labs 接管 |
| 2024 年 | Redis 7.2 稳定版发布,之后宣布协议变更为双许可(RSALv2 + SSPLv1),社区成立 Valkey 等分支 |
2. Ubuntu 环境下安装 Redis
2.1 环境准备
bash
# 更新软件包列表
sudo apt update
# 安装必要的依赖
sudo apt install -y lsb-release curl gpg
2.2 方式一:APT 包管理器安装(推荐新手)
bash
# 安装 Redis
sudo apt install redis -y
# 查看安装的版本
redis-server --version
Ubuntu 仓库中的版本可能不是最新版,适用于快速入门和对版本无特殊要求的场景。
2.3 方式二:官方仓库安装(推荐生产环境)
bash
# 添加 Redis 官方 GPG 密钥
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
# 添加 Redis 官方 APT 仓库
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
# 更新并安装
sudo apt update
sudo apt install -y redis
2.4 方式三:源码编译安装
bash
# 下载最新稳定版源码
wget https://download.redis.io/redis-stable.tar.gz
# 解压
tar -xzf redis-stable.tar.gz
cd redis-stable
# 编译(-j 指定并行编译数,加速)
make -j$(nproc)
# 安装到系统
sudo make install
2.5 启动与管理
bash
# 启动 Redis 服务(安装后默认已启动)
sudo systemctl start redis-server
# 设置开机自启
sudo systemctl enable redis-server
# 查看运行状态
sudo systemctl status redis-server
# 停止服务
sudo systemctl stop redis-server
# 重启服务
sudo systemctl restart redis-server
2.6 验证安装
bash
# 使用 redis-cli 连接并执行 PING 命令
redis-cli ping
# 若返回 PONG,则表示安装成功
2.7 基础配置调整
Redis 主配置文件位于 /etc/redis/redis.conf,建议修改以下关键项:
bash
sudo vim /etc/redis/redis.conf
conf
# 绑定地址(生产环境限定内网 IP)
bind 127.0.0.1
# 保护模式(无密码时仅允许本地连接)
protected-mode yes
# 端口
port 6379
# 守护进程模式
daemonize yes
# 日志文件
logfile /var/log/redis/redis-server.log
# 持久化目录
dir /var/lib/redis
# 设置密码(生产环境强烈建议)
requirepass your_strong_password
修改后重启服务:
bash
sudo systemctl restart redis-server
3. Redis 重要文件及作用
安装 Redis 后,系统中会存在以下重要文件。理解这些文件的职责是运维和管理 Redis 的基础。
| 文件 / 目录 | 路径示例 | 作用 |
|---|---|---|
redis-server |
/usr/bin/redis-server |
Redis 服务端可执行文件,负责请求处理、数据存储、持久化等 |
redis-cli |
/usr/bin/redis-cli |
Redis 命令行交互客户端,详见第 4 章 |
redis-benchmark |
/usr/bin/redis-benchmark |
性能压测工具,评估吞吐量和延迟 |
redis-check-rdb |
/usr/bin/redis-check-rdb |
RDB 快照文件检查与修复工具 |
redis-check-aof |
/usr/bin/redis-check-aof |
AOF 日志文件检查与修复工具(--fix 修复) |
redis-sentinel |
/usr/bin/redis-sentinel |
哨兵高可用程序,监控主从并自动故障转移 |
redis.conf |
/etc/redis/redis.conf |
核心配置文件,涵盖网络、安全、持久化、内存、复制等参数 |
dump.rdb |
/var/lib/redis/dump.rdb |
RDB 持久化产生的内存快照文件 |
appendonly.aof |
/var/lib/redis/appendonly.aof |
AOF 持久化产生的操作日志文件 |
4. Redis 命令行客户端
redis-cli 是 Redis 自带的命令行客户端,两种方式连接 Redis 服务:
交互式方式 :通过 redis-cli -h {host} -p {port} 连接后,后续操作在交互界面中完成:
bash
redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set key hello
OK
127.0.0.1:6379> get key
"hello"
命令方式 :redis-cli -h {host} -p {port} {command} 直接返回命令结果:
bash
redis-cli -h 127.0.0.1 -p 6379 ping
PONG
redis-cli -h 127.0.0.1 -p 6379 set key hello
OK
redis-cli -h 127.0.0.1 -p 6379 get key
"hello"
连接 127.0.0.1:6379 时可省略
-h和-p参数。redis-cli是学习 Redis 的重要工具,更多功能将在后续章节介绍。
Redis 客⼾端与服务端的交互过程

5. Redis 使用场景
| 场景 | 数据结构 | 典型操作 | 说明 |
|---|---|---|---|
| 缓存 | String / Hash | SET GET EXPIRE |
热点数据缓存,降低 DB 压力;注意穿透、击穿、雪崩三类问题 |
| 分布式锁 | String | SET NX PX + Lua |
跨进程互斥锁,红锁算法保证高可用 |
| 计数器 | String | INCR INCRBY |
阅读量、点赞、库存扣减等原子计数 |
| 限流 | Sorted Set / String | ZADD + EXPIRE + Lua |
滑动窗口 / 令牌桶,保护后端服务 |
| 排行榜 | Sorted Set | ZADD ZREVRANGE ZRANK |
积分榜、热度榜,按分数自动排序 |
| 消息队列 | List / Stream | LPUSH+BRPOP / XADD+XREADGROUP |
List 简易队列;Stream 支持消费者组、ACK 确认 |
| Session 共享 | Hash | HSET EXPIRE |
分布式会话集中存储,避免登录漂移 |
| 发布/订阅 | Pub/Sub | PUBLISH SUBSCRIBE |
轻量级消息通知,不支持持久化 |
| 地理位置 | GEO | GEOADD GEORADIUS GEODIST |
附近的人、商家检索、配送范围计算 |
| 位图统计 | Bitmap | SETBIT BITCOUNT BITOP |
签到打卡、用户活跃统计,极省内存 |
| 布隆过滤器 | RedisBloom 模块 | BF.ADD BF.EXISTS |
快速判断元素是否存在,防缓存穿透 |
| 延迟队列 | Sorted Set | ZADD 按时间戳排序 |
定时任务、订单超时取消 |
| 去重统计 | Set / HyperLogLog | SADD PFADD PFCOUNT |
UV 统计、去重计数 |
| 购物车 | Hash | HSET HGETALL |
商品 ID 与数量映射 |
| 验证码 | String | SET EXPIRE |
TTL 自动过期 |
| 好友关系 | Set | SINTER SUNION SDIFF |
共同好友、推荐关注 |
| 分布式 ID | String | INCR |
全局唯一自增 ID 生成 |
| Feed 流 | Sorted Set | ZADD 按时间戳排序 |
关注动态时间线 |
| 配置中心 | Hash | HSET HGET |
集中管理配置项 |
6. 总结
- Redis 的 8 个特性:速度快、基于键值对的数据结果服务器、功能丰富、简单稳定、客⼾端语⾔
多、持久化、主从复制、⽀持⾼可⽤和分布式。 - Redis 并不是万⾦油,有些场景不适合使⽤ Redis 进⾏开发。
- 开发运维结合以及阅读源码是⽤好 Redis 的重要⽅法。
- 根据需求选择稳定版本的 Redis。
本文持续更新中,欢迎交流指正。如有错误或遗漏,请联系作者修正。