系列导读:本系列将带领大家系统学习 Redis,从基础入门到高级应用,涵盖数据类型、集群、安全优化等核心内容。
文章目录
-
- [一、Redis 简介](#一、Redis 简介)
-
- [1.1 什么是 Redis?](#1.1 什么是 Redis?)
- [1.2 Redis 发展历程](#1.2 Redis 发展历程)
- [二、Redis 核心特性](#二、Redis 核心特性)
-
- [2.1 性能极高](#2.1 性能极高)
- [2.2 丰富的数据类型](#2.2 丰富的数据类型)
- [2.3 原子性操作](#2.3 原子性操作)
- [2.4 持久化机制](#2.4 持久化机制)
- [2.5 主从复制](#2.5 主从复制)
- [2.6 发布/订阅模式](#2.6 发布/订阅模式)
- [三、Redis 安装](#三、Redis 安装)
-
- [3.1 Linux 安装(Ubuntu/Debian)](#3.1 Linux 安装(Ubuntu/Debian))
- [3.2 Linux 源码编译安装](#3.2 Linux 源码编译安装)
- [3.3 Windows 安装](#3.3 Windows 安装)
- [3.4 Docker 安装](#3.4 Docker 安装)
- [3.5 客户端连接](#3.5 客户端连接)
- [四、Redis 配置详解](#四、Redis 配置详解)
-
- [4.1 配置文件位置](#4.1 配置文件位置)
- [4.2 核心配置项](#4.2 核心配置项)
- [4.3 运行时配置](#4.3 运行时配置)
- [五、第一个 Redis 程序](#五、第一个 Redis 程序)
-
- [5.1 基础操作](#5.1 基础操作)
- [5.2 计数器示例](#5.2 计数器示例)
- [5.3 Java 示例](#5.3 Java 示例)
- [5.4 Python 示例](#5.4 Python 示例)
- [六、Redis 桌面管理工具](#六、Redis 桌面管理工具)
-
- [6.1 常用 GUI 工具](#6.1 常用 GUI 工具)
- [6.2 RedisInsight 安装](#6.2 RedisInsight 安装)
- 总结
一、Redis 简介
1.1 什么是 Redis?
Redis(Remote Dictionary Server)是一个开源的内存数据库,遵守 BSD 协议,它提供了一个高性能的键值(key-value)存储系统。
┌─────────────────────────────────────────────────────────────┐
│ Redis 定位 │
├─────────────────────────────────────────────────────────────┤
│ 🗄️ 内存数据库 → 数据存储在内存中,访问速度极快 │
│ 📝 键值存储 → 简单的 key-value 映射 │
│ 🔄 多种数据类型 → 字符串、列表、集合、有序集合、哈希 │
│ 🌐 跨平台 → Linux、macOS、Windows 支持 │
└─────────────────────────────────────────────────────────────┘
1.2 Redis 发展历程
| 年份 | 版本 | 重要特性 |
|---|---|---|
| 2009 | 1.0 | 首次发布 |
| 2012 | 2.6 | Lua 脚本支持 |
| 2015 | 3.0 | Redis Cluster 支持 |
| 2020 | 6.0 | 多线程 I/O、ACL 安全 |
| 2022 | 7.0 | Redis Functions、Sharded Pub/Sub |
二、Redis 核心特性
2.1 性能极高
Redis 以其极高的性能而著称,能够支持每秒数十万次的读写操作:
| 操作类型 | 每秒次数 |
|---|---|
| 读操作 | 110,000 次/秒 |
| 写操作 | 81,000 次/秒 |
🚀 高性能原因:
→ 数据存储在内存中,访问速度极快
→ 单线程模型,避免锁竞争开销
→ 高效的事件驱动模型
→ 简洁的数据结构,操作复杂度 O(1)
2.2 丰富的数据类型
Redis 不仅支持基本的键值存储,还提供了丰富的数据类型:
| 数据类型 | 说明 | 典型应用场景 |
|---|---|---|
| String | 字符串、整数、浮点数 | 缓存、计数器、Session |
| Hash | 键值对集合 | 存储对象、用户信息 |
| List | 有序列表 | 消息队列、最新列表 |
| Set | 无序集合 | 标签、好友列表 |
| ZSet | 有序集合 | 排行榜、权重队列 |
| Bitmaps | 位图 | 用户签到、统计 |
| HyperLogLog | 基数统计 | UV 统计 |
| Geospatial | 地理位置 | 附近的人、坐标查询 |
| Streams | 消息队列 | 实时消息处理 |
2.3 原子性操作
Redis 的所有操作都是原子性的,这意味着操作要么完全执行,要么完全不执行。
✅ 原子性保证:
→ INCR 计数器不会出现并发问题
→ SETNX 分布式锁实现简单可靠
→ Lua 脚本执行期间不会被其他命令打断
2.4 持久化机制
Redis 支持数据的持久化,可以将内存中的数据保存到磁盘中:
| 持久化方式 | 说明 | 特点 |
|---|---|---|
| RDB | 定时快照 | 文件小,恢复快 |
| AOF | 追加日志 | 数据完整,文件较大 |
| 混合 | 结合两者 | 推荐生产使用 |
2.5 主从复制
Redis 支持 master-slave 模式的数据备份:
┌─────────┐ 复制 ┌─────────┐
│ Master │ ──────────────────► │ Slave │
│ 主节点 │ │ 从节点 │
└─────────┘ └─────────┘
│
└──────────────────────────► ┌─────────┐
│ Slave │
└─────────┘
2.6 发布/订阅模式
Redis 内置了发布/订阅模式(Pub/Sub),允许客户端之间通过消息传递进行通信:
发布者 (Publisher) 频道 (Channel) 订阅者 (Subscriber)
│ │ │
│ PUBLISH channel msg │ │
├──────────────────────┼───────────────────┤
│ │ │
│ │ ◄────────────────┤
三、Redis 安装
3.1 Linux 安装(Ubuntu/Debian)
bash
# 更新软件源
sudo apt update
# 安装 Redis
sudo apt install redis-server
# 检查安装
redis-server --version
# 启动 Redis
sudo systemctl start redis
# 设置开机自启
sudo systemctl enable redis
# 查看 Redis 状态
sudo systemctl status redis
3.2 Linux 源码编译安装
bash
# 下载 Redis 源码
wget http://download.redis.io/releases/redis-7.2.4.tar.gz
# 解压
tar -xzvf redis-7.2.4.tar.gz
cd redis-7.2.4
# 编译
make
# 安装
sudo make install
# 启动 Redis(使用默认配置)
cd src
./redis-server
# 启动 Redis(使用自定义配置)
./redis-server ../redis.conf
3.3 Windows 安装
bash
# 方法一:使用 WSL(推荐)
# 在 Windows 上安装 WSL2,然后按照 Linux 方法安装
# 方法二:使用 Memurai 或 Redis Windows 版
# 下载:https://github.com/tporadowski/redis/releases
3.4 Docker 安装
bash
# 拉取镜像
docker pull redis:latest
# 运行 Redis 容器
docker run -d --name myredis \
-p 6379:6379 \
redis:latest
# 运行并持久化数据
docker run -d --name myredis \
-p 6379:6379 \
-v /myredis/data:/data \
redis:latest redis-server --appendonly yes
3.5 客户端连接
bash
# 启动 Redis 客户端
redis-cli
# 连接远程 Redis
redis-cli -h 192.168.1.100 -p 6379
# 测试连接
redis-cli ping
# 返回:PONG
# 认证连接(如果设置了密码)
redis-cli -a yourpassword
四、Redis 配置详解
4.1 配置文件位置
| 操作系统 | 默认配置路径 |
|---|---|
| Linux | /etc/redis/redis.conf |
| macOS | /usr/local/etc/redis.conf |
| Windows | redis.windows.conf |
4.2 核心配置项
conf
# ==================== 基本配置 ====================
# 是否以守护进程运行
daemonize no
# 监听端口
port 6379
# 绑定地址(0.0.0.0 允许外部访问)
bind 127.0.0.1
# 连接超时时间(秒)
timeout 300
# 日志级别
loglevel notice
# 数据库数量
databases 16
# ==================== 持久化配置 ====================
# RDB 快照条件
save 900 1 # 900秒内至少1个key变化
save 300 10 # 300秒内至少10个key变化
save 60 10000 # 60秒内至少10000个key变化
# RDB 文件名
dbfilename dump.rdb
# 数据目录
dir ./
# ==================== 内存配置 ====================
# 最大内存限制
maxmemory 2gb
# 内存淘汰策略
maxmemory-policy allkeys-lru
# ==================== 安全配置 ====================
# 连接密码
requirepass yourpassword
# ==================== AOF 持久化 ====================
# 启用 AOF
appendonly yes
# AOF 文件名
appendfilename "appendonly.aof"
# 同步策略
appendfsync everysec # everysec / always / no
4.3 运行时配置
bash
# 查看所有配置
redis-cli CONFIG GET *
# 查看单个配置
redis-cli CONFIG GET maxmemory
# 修改配置(运行时)
redis-cli CONFIG SET maxmemory 4gb
# 修改配置(重启后生效)
redis-cli CONFIG SET requirepass newpassword
五、第一个 Redis 程序
5.1 基础操作
bash
# 启动客户端
redis-cli
# 设置键值对
redis-cli> SET mykey "Hello Redis"
OK
# 获取值
redis-cli> GET mykey
"Hello Redis"
# 设置带过期时间的键(秒)
redis-cli> SETEX cachekey 60 "cached data"
OK
# 仅当键不存在时设置
redis-cli> SETNX newkey "new value"
(integer) 1
# 查看所有键
redis-cli> KEYS *
1) "mykey"
2) "newkey"
# 删除键
redis-cli> DEL mykey
(integer) 1
# 检查键是否存在
redis-cli> EXISTS mykey
(integer) 0
5.2 计数器示例
bash
# 设置计数器
redis-cli> SET counter 0
OK
# 递增
redis-cli> INCR counter
(integer) 1
redis-cli> INCR counter
(integer) 2
# 递增指定数值
redis-cli> INCRBY counter 10
(integer) 12
# 递减
redis-cli> DECR counter
(integer) 11
5.3 Java 示例
java
import redis.clients.jedis.Jedis;
public class RedisDemo {
public static void main(String[] args) {
// 连接 Redis
Jedis jedis = new Jedis("localhost", 6379);
// 设置密码(如果需要)
// jedis.auth("password");
// 字符串操作
jedis.set("greeting", "Hello Redis!");
System.out.println(jedis.get("greeting"));
// 计数器
jedis.set("visits", "0");
jedis.incr("visits");
System.out.println("Visits: " + jedis.get("visits"));
// 哈希操作
jedis.hset("user:1", "name", "张三");
jedis.hset("user:1", "age", "25");
System.out.println(jedis.hgetAll("user:1"));
// 列表操作
jedis.lpush("tasks", "task1");
jedis.lpush("tasks", "task2");
System.out.println(jedis.lrange("tasks", 0, -1));
// 关闭连接
jedis.close();
}
}
5.4 Python 示例
python
import redis
# 连接 Redis
r = redis.Redis(host='localhost', port=6379, decode_responses=True)
# 字符串操作
r.set('greeting', 'Hello Redis!')
print(r.get('greeting'))
# 计数器
r.set('visits', '0')
r.incr('visits')
print(f'Visits: {r.get("visits")}')
# 哈希操作
r.hset('user:1', mapping={'name': '张三', 'age': '25'})
print(r.hgetall('user:1'))
# 列表操作
r.lpush('tasks', 'task1', 'task2')
print(r.lrange('tasks', 0, -1))
# 设置过期时间
r.setex('temp_key', 60, 'temporary data')
六、Redis 桌面管理工具
6.1 常用 GUI 工具
| 工具 | 平台 | 说明 |
|---|---|---|
| Redis Desktop Manager | 跨平台 | 功能强大的图形界面 |
| Another Redis Desktop Manager | 跨平台 | 开源免费 |
| RedisInsight | 跨平台 | Redis 官方工具 |
| phpRedisAdmin | Web | PHP 编写的 Web 管理 |
6.2 RedisInsight 安装
bash
# Docker 方式
docker run -d --name redisinsight \
-p 8001:8001 \
-v redisinsight:/db \
redislabs/redisinsight:latest
访问 http://localhost:8001 即可使用。
总结
本文我们学习了:
✅ Redis 简介 :高性能内存数据库,键值存储系统
✅ 核心特性 :丰富数据类型、原子操作、持久化、主从复制
✅ 安装配置 :Linux、Docker、源码编译
✅ 配置文件 :核心配置项详解
✅ 基础操作 :SET/GET/KEYS 等基本命令
✅ 多语言客户端:Java、Python 示例
下篇预告 :(Redis 从入门到精通(二):数据类型详解),将深入讲解 Redis 的 8 种数据类型及适用场景。
作者 :刘~浪地球
系列 :Redis 从入门到精通(一)
更新时间:2026-04-02