Redis 是一个高性能的开源内存数据结构存储系统,常用于缓存、消息队列和实时数据处理。以下是一个简明 Redis 教程,涵盖基础概念、安装和常用命令,适合初学者快速上手。
1. Redis 简介
- 全称: Remote Dictionary Server
- 特点:
- 键值对存储(Key-Value Store)
- 数据存储在内存中,速度极快
- 支持多种数据结构:字符串、哈希、列表、集合、有序集合等
- 支持持久化(RDB 和 AOF)、主从复制、分布式集群
- 用途:
- 缓存(如加速 Web 应用)
- 会话存储
- 排行榜
- 发布/订阅消息系统
2. 安装 Redis
Linux(Ubuntu 示例)
- 更新包索引:
sudo apt update
- 安装 Redis:
sudo apt install redis-server
- 启动 Redis 服务:
sudo systemctl start redis
- 检查 Redis 是否运行:
redis-cli ping
输出 PONG
表示成功。
Windows
- Redis 官方不支持 Windows,但可以使用 WSL 或从 GitHub 下载非官方版本(如 Microsoft 的 Redis 移植)。
- 推荐使用 Docker:
docker run -d -p 6379:6379 redis
MacOS
使用 Homebrew:
brew install redis
brew services start redis
3. 连接 Redis
- 使用命令行工具
redis-cli
:
redis-cli
- 测试连接:
127.0.0.1:6379> ping
PONG
4. 常用数据结构和命令
Redis 支持多种数据结构,以下是常用命令示例:
4.1 字符串(String)
存储简单的键值对,适合缓存或计数器。
- 设置键值:
SET key value
示例:
SET name "Alice"
- 获取值:
GET key
示例:
GET name
# 输出: "Alice"
- 自增(用于计数器):
INCR counter
4.2 哈希(Hash)
存储对象的字段和值,适合表示结构化数据。
- 设置字段:
HSET user:1 name "Bob" age 25
- 获取字段:
HGET user:1 name
# 输出: "Bob"
- 获取所有字段:
HGETALL user:1
4.3 列表(List)
有序的字符串列表,适合队列或栈。
- 左推入:
LPUSH queue "task1"
- 右弹出:
RPOP queue
- 查看列表:
LRANGE queue 0 -1
4.4 集合(Set)
无序、不重复的字符串集合,适合去重或关系运算。
- 添加元素:
SADD myset "apple" "banana"
- 查看成员:
SMEMBERS myset
- 交集:
SINTER set1 set2
4.5 有序集合(Sorted Set)
带分数的集合,适合排行榜。
- 添加元素:
ZADD leaderboard 100 "Alice" 200 "Bob"
- 获取排名:
ZRANGE leaderboard 0 -1 WITHSCORES
5. 持久化
Redis 支持两种持久化方式:
- RDB(快照):定期保存数据到磁盘,适合备份。
SAVE # 手动触发快照
- AOF(追加文件):记录每个写操作,数据恢复更完整。
启用 AOF:
CONFIG SET appendonly yes
配置文件:/etc/redis/redis.conf
(Linux)。
6. 发布/订阅
Redis 支持简单的消息系统。
- 订阅频道:
SUBSCRIBE channel1
- 发布消息:
PUBLISH channel1 "Hello, subscribers!"
7. 客户端库
在项目中使用 Redis,推荐以下库:
- Python:
redis-py
pip install redis
示例:
import redis
r = redis.Redis(host='localhost', port=6379)
r.set('key', 'value')
print(r.get('key')) # b'value'
- Node.js:
ioredis
- Java:
Jedis
或Lettuce
8. 性能优化
- 内存管理:设置
maxmemory
限制,避免占用过多内存。 - 键设计:使用命名空间(如
user:123:info
)提高可读性。 - 管道(Pipeline):批量发送命令,减少网络开销。
示例(Python):
with r.pipeline() as pipe:
pipe.set('key1', 'value1')
pipe.set('key2', 'value2')
pipe.execute()
9. 常见问题
- 连接失败:检查防火墙或
bind
配置(默认只允许127.0.0.1
)。 - 数据丢失:确保启用持久化或检查内存淘汰策略。
- 性能瓶颈:使用
INFO
命令监控内存和命令延迟。
10. 进阶学习
- 集群:学习 Redis Cluster 实现分布式存储。
- Lua 脚本:用 Lua 扩展 Redis 功能。
- Redis Sentinel:实现高可用性。
- 官方文档:https://redis.io/documentation
- 中文资源:https://www.redis.cn/
示例场景:简单缓存
# 设置缓存,带 60 秒过期时间
SETEX page:home 60 "{\"title\": \"Home Page\"}"
# 获取缓存
GET page:home
如果需要更详细的某部分(如特定数据结构、集群配置或代码示例),请告诉我!
发表回复