Skip to content

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

  1. 访问 Redis 官网
  2. 下载 Windows 版本的 Redis
  3. 解压并运行 redis-server.exe

macOS

  1. 使用 Homebrew 安装:brew install redis
  2. 启动 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 redis

Redis 基本操作

连接 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 member

Redis 与 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. 数据持久化问题

  • 配置合适的持久化策略
  • 定期备份

学习资源

实践练习

  1. 安装和配置 Redis
  2. 熟悉 Redis 基本命令
  3. 与 Node.js 集成
  4. 实现缓存功能
  5. 构建一个简单的消息队列

基于 VitePress 的本地知识库