Skip to main content
Bun 的 Redis 客户端支持 Redis 服务器版本 7.2 及以上。
Bun 原生 Redis 客户端提供基于 Promise 的 API,内置连接管理、完全类型化的响应以及 TLS 支持。
redis.ts

入门

使用 Redis 客户端,首先需要创建一个连接:
redis.ts
默认情况下,客户端按优先级从以下环境变量读取连接信息:
  • REDIS_URL
  • VALKEY_URL
  • 若未设置,默认使用 "redis://localhost:6379"

连接生命周期

Redis 客户端会自动在后台管理连接:
redis.ts
你也可以手动控制连接生命周期:
redis.ts

基本操作

字符串操作

redis.ts

数值操作

redis.ts

哈希操作

redis.ts

集合操作

redis.ts

发布/订阅(Pub/Sub)

Bun 为 Redis Pub/Sub 协议提供了原生绑定,该功能在 Bun 1.2.23 中加入。
Redis Pub/Sub 目前处于实验阶段。我们预计它会趋于稳定,但仍在持续收集反馈并寻找改进方向。

基本用法

publisher.ts 中创建发布者:
publisher.ts
在另一个文件 subscriber.ts 中创建订阅者:
subscriber.ts
在一个终端运行订阅者:
terminal
另一个终端运行发布者:
terminal
订阅会接管 RedisClient 连接:已订阅的客户端只能调用 RedisClient.prototype.subscribe()。要向 Redis 发送其他命令,请使用 .duplicate() 创建单独的连接:
redis.ts

发布消息

使用 publish() 方法发布消息:
redis.ts

订阅频道

使用 .subscribe() 方法订阅频道:
redis.ts
使用 .unsubscribe() 取消订阅:
redis.ts

高级用法

命令执行与流水线

客户端默认自动进行流水线处理,通过批量发送多个命令并在响应到达时依序处理,提升性能:
redis.ts
要禁用自动流水线处理,请将 enableAutoPipelining 选项设置为 false
redis.ts

原生命令执行

使用 send 方法运行任意 Redis 命令,包括没有专用方法的命令。第一个参数是命令名称,第二个参数是字符串参数数组。
redis.ts

连接事件

可以注册连接事件处理函数:
redis.ts

连接状态及监控

redis.ts

类型转换

客户端会自动将 Redis 响应转换为 JavaScript 值:
  • 整数类型返回 JavaScript 数字
  • 大块字符串返回 JavaScript 字符串
  • 简单字符串返回 JavaScript 字符串
  • 空字符串返回 null
  • 数组返回 JavaScript 数组
  • 错误响应抛出对应错误对象,包含错误代码
  • 布尔类型(RESP3)返回 JavaScript 布尔值
  • 映射类型(RESP3)返回 JavaScript 对象
  • 集合类型(RESP3)返回 JavaScript 数组
特殊命令特别处理:
  • EXISTS 返回布尔值(1 转 true,0 转 false)
  • SISMEMBER 返回布尔值(1 转 true,0 转 false)
以下命令会禁用自动流水线:
  • AUTH
  • INFO
  • QUIT
  • EXEC
  • MULTI
  • WATCH
  • SCRIPT
  • SELECT
  • CLUSTER
  • DISCARD
  • UNWATCH
  • PIPELINE
  • SUBSCRIBE
  • PSUBSCRIBE
  • UNSUBSCRIBE
  • UNPSUBSCRIBE

连接选项

创建客户端时,可以传入选项来配置连接:
redis.ts

重连行为

连接断开时,客户端会自动尝试使用指数退避算法重连:
  1. 客户端从较短的延迟(50 毫秒)开始,每次尝试将延迟时间加倍
  2. 重连延迟最长为 2000 毫秒(2 秒)
  3. 客户端最多尝试重连 maxRetries 次(默认:20)
  4. 断线期间执行的命令:
    • 如果 enableOfflineQueue 为 true(默认值),则会进入队列
    • 如果 enableOfflineQueue 为 false,则会立即被拒绝

支持的 URL 格式

Redis 客户端支持多种连接 URL 格式:
redis.ts

错误处理

Redis 客户端会抛出带类型的错误,用于不同场景的异常:
redis.ts
常见错误码:
  • ERR_REDIS_CONNECTION_CLOSED - 服务器连接关闭
  • ERR_REDIS_AUTHENTICATION_FAILED - 认证失败
  • ERR_REDIS_INVALID_RESPONSE - 收到服务器无效响应

示例用例

缓存

redis.ts

限流

redis.ts

会话存储

redis.ts

实现说明

Bun 的 Redis 客户端使用 Rust 实现,并采用 Redis 序列化协议(RESP3)。它会通过指数退避机制自动重新连接,并对命令进行流水线处理,因此可以连续发送多个命令,而无需等待之前命令的响应。

限制及未来规划

我们计划在未来版本中解决的限制:
  • 事务(MULTI/EXEC)必须通过原始命令执行
不支持的功能:
  • Redis Sentinel
  • Redis Cluster