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
发布/订阅
Bun 为 Redis 发布/订阅协议提供了原生绑定,于 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 数组返回
- 错误响应抛出带有相应错误码的 JavaScript 错误
- 布尔响应(RESP3)作为 JavaScript 布尔值返回
- 映射响应(RESP3)作为 JavaScript 对象返回
- 集合响应(RESP3)作为 JavaScript 数组返回
EXISTS返回布尔值而不是数字(1 变为 true,0 变为 false)SISMEMBER返回布尔值(1 变为 true,0 变为 false)
AUTHINFOQUITEXECMULTIWATCHSCRIPTSELECTCLUSTERDISCARDUNWATCHPIPELINESUBSCRIBEPSUBSCRIBEUNSUBSCRIBEUNPSUBSCRIBE
连接选项
创建客户端时,可以传递选项来配置连接:redis.ts
重连行为
当连接丢失时,客户端会自动尝试使用指数退避重连:- 客户端以较小延迟(50ms)开始,每次尝试加倍
- 重连延迟上限为 2000ms(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 集群