Appearance
Redis
什么是 Redis
Redis(Remote Dictionary Server)是一个开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。Redis 支持多种数据结构,如字符串、哈希表、列表、集合、有序集合等,具有高性能、高可用性和可扩展性的特点。
Redis 的特点
1. 高性能
- 内存存储,读写速度快
- 单线程模型,避免了线程切换的开销
- 非阻塞 I/O
2. 丰富的数据结构
- 字符串 (String)
- 哈希表 (Hash)
- 列表 (List)
- 集合 (Set)
- 有序集合 (Sorted Set)
- 位图 (Bitmap)
- 地理位置 (Geo)
- 流 (Stream)
3. 持久化
- RDB(Redis Database):定期快照
- AOF(Append Only File):日志追加
4. 高可用性
- 主从复制
- Sentinel 哨兵机制
- Cluster 集群
5. 丰富的功能
- 发布/订阅
- 事务
- 管道
- Lua 脚本
- 过期时间
安装 Redis
Windows
- 访问 Redis 官网
- 下载 Windows 版本的 Redis
- 解压并运行 redis-server.exe
macOS
- 使用 Homebrew 安装:
brew install redis - 启动 Redis 服务:
brew services start redis
Linux
bash
# Ubuntu/Debian
sudo apt update
sudo apt install redis-server
# CentOS/RHEL
sudo yum install redis
sudo systemctl start redis
sudo systemctl enable redisRedis 基本操作
连接 Redis
bash
redis-cli字符串操作
bash
# 设置键值
SET key value
# 获取值
GET key
# 递增
INCR key
# 递减
DECR key
# 设置过期时间
SETEX key seconds value哈希表操作
bash
# 设置哈希表字段
HSET hash field value
# 获取哈希表字段
HGET hash field
# 获取所有字段和值
HGETALL hash
# 删除哈希表字段
HDEL hash field列表操作
bash
# 左侧插入
LPUSH list value
# 右侧插入
RPUSH list value
# 左侧弹出
LPOP list
# 右侧弹出
RPOP list
# 获取列表元素
LRANGE list start stop集合操作
bash
# 添加元素
SADD set member
# 移除元素
SREM set member
# 获取所有元素
SMEMBERS set
# 集合交集
SINTER set1 set2
# 集合并集
SUNION set1 set2有序集合操作
bash
# 添加元素
ZADD sortedset score member
# 获取元素
ZRANGE sortedset start stop
# 按分数范围获取
ZRANGEBYSCORE sortedset min max
# 增加分数
ZINCRBY sortedset increment memberRedis 与 Node.js 集成
安装 Redis 客户端
bash
npm install redis基本连接
javascript
const redis = require('redis');
// 创建客户端
const client = redis.createClient({
host: 'localhost',
port: 6379
});
// 连接事件
client.on('connect', () => {
console.log('Connected to Redis');
});
// 错误事件
client.on('error', (err) => {
console.error('Redis error:', err);
});
// 设置键值
client.set('key', 'value', (err, reply) => {
if (err) console.error(err);
console.log(reply);
});
// 获取值
client.get('key', (err, reply) => {
if (err) console.error(err);
console.log(reply);
});
// 关闭连接
client.quit();使用 Redis 客户端 v4
javascript
const redis = require('redis');
async function main() {
// 创建客户端
const client = redis.createClient();
// 连接事件
client.on('connect', () => {
console.log('Connected to Redis');
});
// 错误事件
client.on('error', (err) => {
console.error('Redis error:', err);
});
// 连接到 Redis
await client.connect();
// 设置键值
await client.set('key', 'value');
console.log('Key set');
// 获取值
const value = await client.get('key');
console.log('Value:', value);
// 关闭连接
await client.quit();
}
main();Redis 的应用场景
1. 缓存
- 页面缓存
- API 缓存
- 数据缓存
2. 会话管理
- 用户会话存储
- 分布式会话
3. 消息队列
- 任务队列
- 事件处理
4. 实时统计
- 计数器
- 排行榜
- 访问统计
5. 发布/订阅
- 实时通知
- 事件广播
Redis 最佳实践
1. 内存管理
- 设置合理的内存限制
- 使用过期时间
- 定期清理无用数据
2. 性能优化
- 使用管道
- 批量操作
- 合理使用数据结构
3. 高可用性
- 使用主从复制
- 配置 Sentinel
- 考虑使用 Cluster
4. 安全性
- 设置密码
- 限制网络访问
- 使用 SSL
5. 监控和维护
- 监控 Redis 实例
- 定期备份
- 检查内存使用情况
Redis 常见问题
1. 内存不足
- 增加内存
- 设置内存限制
- 清理过期数据
2. 性能问题
- 优化查询
- 使用管道
- 合理使用数据结构
3. 高可用性问题
- 配置主从复制
- 使用 Sentinel
- 部署 Cluster
4. 数据持久化问题
- 配置合适的持久化策略
- 定期备份
学习资源
实践练习
- 安装和配置 Redis
- 熟悉 Redis 基本命令
- 与 Node.js 集成
- 实现缓存功能
- 构建一个简单的消息队列