Bun 的 Redis 客户端支持 Redis 服务器版本 7.2 及以上。
redis.ts
入门
使用 Redis 客户端,首先需要创建一个连接:redis.ts
REDIS_URLVALKEY_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 中加入。基本用法
在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)
AUTHINFOQUITEXECMULTIWATCHSCRIPTSELECTCLUSTERDISCARDUNWATCHPIPELINESUBSCRIBEPSUBSCRIBEUNSUBSCRIBEUNPSUBSCRIBE
连接选项
创建客户端时,可以传入选项来配置连接:redis.ts
重连行为
连接断开时,客户端会自动尝试使用指数退避算法重连:- 客户端从较短的延迟(50 毫秒)开始,每次尝试将延迟时间加倍
- 重连延迟最长为 2000 毫秒(2 秒)
- 客户端最多尝试重连
maxRetries次(默认:20) - 断线期间执行的命令:
- 如果
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