Redis 适配器
createRedisAdapter 实现了 CacheAdapter 接口,将缓存操作代理到 Redis,支持 TTL、键前缀与多种 Redis 客户端兼容。
import { createCache, createRedisAdapter, createRedisClient } from "@ventostack/cache";
// 使用 Bun 原生 Redisconst redis = createRedisClient({ url: "redis://localhost:6379" });const cache = createCache(createRedisAdapter({ client: redis }));通过 keyPrefix 为所有缓存键添加前缀,实现多应用隔离:
const cache = createCache( createRedisAdapter({ client: redis, keyPrefix: "app:v1:" }));
await cache.set("user:1", { name: "Alice" });// Redis 中实际存储键为 "app:v1:user:1"/** Redis 缓存客户端最小接口 */interface RedisCacheClientLike { get(key: string): Promise<string | null>; set(key: string, value: string): Promise<unknown>; expire(key: string, seconds: number): Promise<number>; del(key: string): Promise<number>; exists(key: string): Promise<boolean>; keys(pattern: string): Promise<string[]>; send(command: string, args: string[]): Promise<unknown>;}
/** Redis 适配器选项 */interface RedisAdapterOptions { /** Redis 客户端实例 */ client: RedisCacheClientLike; /** 键前缀,默认 "" */ keyPrefix?: string;}
/** 创建 Redis 缓存适配器 */function createRedisAdapter(options: RedisAdapterOptions): CacheAdapter;createRedisAdapter使用set+expire两步设置 TTL,最大化兼容不同客户端。flush()通过send("FLUSHDB", [])清空当前 Redis 数据库,生产环境请谨慎使用。keys()依赖 Redis 的KEYS命令,在大量键场景下建议使用SCAN替代(可通过自定义适配器实现)。- 键前缀在
keys()返回结果中会被自动去除,保持与无前缀模式一致的开发体验。