Redis 教程
Redis (Remote Dictionary Server) 是一个开源的内存数据结构存储系统,可以用作数据库、缓存和消息中间件。本教程将介绍 Redis 的基础知识和常用操作。
1. Redis 简介
Redis 是一个高性能的键值对数据库,与传统的关系型数据库不同,Redis 将数据存储在内存中,因此读写速度非常快。Redis 支持多种数据类型,包括字符串、哈希表、列表、集合和有序集合等。
主要特点
- 高性能:所有数据存储在内存中,读写速度极快
- 持久化:支持数据持久化到磁盘
- 数据结构丰富:支持多种数据类型
- 原子操作:所有操作都是原子性的
- 支持事务:可以批量执行多个命令
- 支持主从复制:实现高可用性
- 支持 Lua 脚本:可以执行 Lua 脚本
2. 安装 Redis
Linux 上安装
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install redis-server# CentOS/RHEL
sudo yum install epel-release
sudo yum install redis
macOS 上安装
brew install redis
Windows 上安装
Windows 不是 Redis 的官方支持平台,但可以通过以下方式安装:
- 使用 WSL (Windows Subsystem for Linux)
- 下载适用于 Windows 的 Redis 版本:https://github.com/tporadowski/redis/releases
启动 Redis 服务器
# 启动服务
redis-server# 以守护进程方式启动
redis-server --daemonize yes
3. Redis 基本命令
连接到 Redis
redis-cli
基本操作
# 测试连接
PING
# 返回 PONG# 设置键值对
SET key value# 获取值
GET key# 删除键
DEL key# 检查键是否存在
EXISTS key# 设置过期时间(秒)
EXPIRE key seconds# 查看剩余过期时间
TTL key# 查看所有键
KEYS *# 清空所有数据
FLUSHALL
4. Redis 数据类型及操作
字符串 (String)
# 设置字符串
SET name "John"# 获取字符串
GET name# 追加内容
APPEND name " Doe"# 获取字符串长度
STRLEN name# 增加数值
SET counter 10
INCR counter # 增加 1
INCRBY counter 5 # 增加 5# 减少数值
DECR counter # 减少 1
DECRBY counter 5 # 减少 5
哈希表 (Hash)
# 设置哈希表字段
HSET user name "John"
HSET user age 30# 同时设置多个字段
HMSET user email "john@example.com" city "New York"# 获取字段值
HGET user name# 获取所有字段和值
HGETALL user# 删除字段
HDEL user city# 检查字段是否存在
HEXISTS user email
列表 (List)
# 从左侧添加元素
LPUSH todos "Buy groceries"
LPUSH todos "Clean house"# 从右侧添加元素
RPUSH todos "Read book"# 获取列表范围内的元素
LRANGE todos 0 -1 # 获取全部元素# 获取列表长度
LLEN todos# 移除并返回左侧第一个元素
LPOP todos# 移除并返回右侧第一个元素
RPOP todos
集合 (Set)
# 添加元素到集合
SADD colors "red"
SADD colors "blue" "green"# 获取集合所有元素
SMEMBERS colors# 检查元素是否存在
SISMEMBER colors "red"# 获取集合元素数量
SCARD colors# 移除元素
SREM colors "red"# 集合操作
SADD set1 "a" "b" "c"
SADD set2 "c" "d" "e"
SINTER set1 set2 # 交集
SUNION set1 set2 # 并集
SDIFF set1 set2 # 差集
有序集合 (Sorted Set)
# 添加元素和分数
ZADD leaderboard 100 "Alice"
ZADD leaderboard 85 "Bob"
ZADD leaderboard 95 "Charlie"# 获取元素的分数
ZSCORE leaderboard "Alice"# 获取排名
ZRANK leaderboard "Alice" # 从低到高
ZREVRANK leaderboard "Alice" # 从高到低# 按分数范围获取元素
ZRANGE leaderboard 0 -1 # 所有元素(从低到高)
ZREVRANGE leaderboard 0 -1 # 所有元素(从高到低)
ZRANGEBYSCORE leaderboard 90 100 # 分数在 90-100 之间的元素
5. Redis 高级特性
事务
Redis 事务允许在一个步骤中执行多个命令:
# 开始事务
MULTI# 添加命令到队列
SET user:1:name "John"
SET user:1:age 30
SADD active_users 1# 执行事务
EXEC# 取消事务
DISCARD
发布/订阅
Redis 可以作为消息系统使用:
# 订阅频道(在一个客户端中运行)
SUBSCRIBE news# 向频道发布消息(在另一个客户端中运行)
PUBLISH news "Breaking news: Redis is awesome!"
持久化
Redis 提供两种持久化方式:
- RDB (Redis Database):按照指定的时间间隔将数据集快照保存到磁盘。
- AOF (Append Only File):记录服务器接收的每一个写操作。
在 redis.conf
中配置:
# RDB 配置
save 900 1 # 900秒(15分钟)内至少有1个键被修改则保存
save 300 10 # 300秒(5分钟)内至少有10个键被修改则保存
save 60 10000 # 60秒内至少有10000个键被修改则保存# AOF 配置
appendonly yes
appendfsync everysec # 每秒同步一次
6. Redis 安全性
设置密码
在 redis.conf
中:
requirepass yourpassword
使用密码连接:
redis-cli -a yourpassword
# 或者连接后认证
AUTH yourpassword
限制访问
在 redis.conf
中:
bind 127.0.0.1 # 只监听本地连接
7. Redis 实用工具
Redis-benchmark:性能测试工具
redis-benchmark -n 100000 -c 50
Redis 数据备份与恢复
# 备份
SAVE # 同步保存
BGSAVE # 异步保存# 恢复
# 只需将 dump.rdb 文件放到 Redis 工作目录
8. Redis 常见应用场景
- 缓存:减轻数据库负载
- 会话存储:存储用户会话数据
- 排行榜/计数器:利用有序集合实现
- 消息队列:使用列表或发布/订阅功能
- 实时分析:利用高性能特性处理实时数据
- 地理位置应用:使用 GEO 命令支持
9. 总结
Redis 是一个功能强大的内存数据存储系统,具有高性能、灵活性和丰富的数据结构。本教程介绍了 Redis 的基础知识和常用操作,希望能帮助你开始使用 Redis。随着深入学习,你将发现 Redis 在各种场景下的更多应用可能性。