diff --git a/docs/content/6.drivers/redis.md b/docs/content/6.drivers/redis.md index de19c3d..26ef55b 100644 --- a/docs/content/6.drivers/redis.md +++ b/docs/content/6.drivers/redis.md @@ -49,7 +49,12 @@ const storage = createStorage({ - `url`: Url to use for connecting to redis. Takes precedence over `host` option. Has the format `redis://:@:` - `cluster`: List of redis nodes to use for cluster mode. Takes precedence over `url` and `host` options. - `clusterOptions`: Options to use for cluster mode. +- `ttl`: Default TTL for all items in **seconds**. See [ioredis](https://github.com/luin/ioredis/blob/master/API.md#new-redisport-host-options) for all available options. `lazyConnect` option is enabled by default so that connection happens on first redis operation. + +**Transaction options:** + +- `ttl`: Supported for `setItem(key, value, { ttl: number /* seconds */ })` diff --git a/src/drivers/redis.ts b/src/drivers/redis.ts index 60bbb48..d61de37 100644 --- a/src/drivers/redis.ts +++ b/src/drivers/redis.ts @@ -26,6 +26,11 @@ export interface RedisOptions extends _RedisOptions { * Options to use for cluster mode. */ clusterOptions?: ClusterOptions; + + /** + * Default TTL for all items in seconds. + */ + ttl?: number; } export default defineDriver((opts: RedisOptions = {}) => { @@ -60,8 +65,13 @@ export default defineDriver((opts: RedisOptions = {}) => { const value = await getRedisClient().get(p(key)); return value === null ? null : value; }, - async setItem(key, value) { - await getRedisClient().set(p(key), value); + async setItem(key, value, tOptions) { + let ttl = tOptions?.ttl ?? opts.ttl; + if (ttl) { + await getRedisClient().set(p(key), value, "EX", tOptions.ttl); + } else { + await getRedisClient().set(p(key), value); + } }, async removeItem(key) { await getRedisClient().del(p(key));