UNPKG

unstorage

Version:
59 lines (58 loc) 1.65 kB
import { defineDriver } from "./utils/index.mjs"; import Redis from "ioredis"; export default defineDriver((opts = {}) => { let redisClient; const getRedisClient = () => { if (redisClient) { return redisClient; } if (opts.cluster) { redisClient = new Redis.Cluster(opts.cluster, opts.clusterOptions); } else if (opts.url) { redisClient = new Redis(opts.url, opts); } else { redisClient = new Redis(opts); } return redisClient; }; const base = (opts.base || "").replace(/:$/, ""); const p = (key) => base ? `${base}:${key}` : key; const d = (key) => base ? key.replace(base, "") : key; return { name: "redis", options: opts, async hasItem(key) { return Boolean(await getRedisClient().exists(p(key))); }, async getItem(key) { const value = await getRedisClient().get(p(key)); return value === null ? null : value; }, async setItem(key, value, tOptions) { let ttl = tOptions?.ttl ?? opts.ttl; if (ttl) { await getRedisClient().set(p(key), value, "EX", ttl); } else { await getRedisClient().set(p(key), value); } }, async removeItem(key) { await getRedisClient().del(p(key)); }, async getKeys() { const keys = await getRedisClient().keys(p("*")); return keys.map((key) => d(key)); }, async clear() { const keys = await getRedisClient().keys(p("*")); if (keys.length === 0) { return; } return getRedisClient().del(keys).then(() => { }); }, dispose() { return getRedisClient().disconnect(); } }; });