Skip to main content

CacheResolver

The CacheResolver class provides a flexible way to configure and switch between different cache adapters at runtime.

Initial configuration

To begin using the CacheResolver, you will need to register all required adapters during initialization.

import { CacheResolver } from "eridu-tech/cache";
import { MemoryCacheAdapter } from "eridu-tech/cache/memory-cache-adapter";
import { RedisCacheAdapter } from "eridu-tech/cache/redis-cache-adapter";
import { Serde } from "eridu-tech/serde";
import type { ISerde } from "eridu-tech/serde/contracts";
import { SuperJsonSerdeAdapter } from "eridu-tech/serde/super-json-serde-adapter";
import { TimeSpan } from "eridu-tech/time-span";
import Redis from "ioredis";

const serde = new Serde(new SuperJsonSerdeAdapter());
const cacheResolver = new CacheResolver({
adapters: {
memory: new MemoryCacheAdapter(),
redis: new RedisCacheAdapter({
database: new Redis("YOUR_REDIS_CONNECTION"),
serde,
}),
},
// You can set an optional default adapter
defaultAdapter: "memory",
});

Usage

1. Using the default adapter

await cacheResolver.use().add("user/jose@gmail.com", {
name: "Jose",
age: 20,
});
danger

Note that if you dont set a default adapter, an error will be thrown.

2. Specifying an adapter explicitly

await cacheResolver.use("redis").add("user/jose@gmail.com", {
name: "Jose",
age: 20,
});
danger

Note that if you specify a non-existent adapter, an error will be thrown.

3. Overriding default settings

The CacheResolver provides chainable methods to override the base configuration per-use:

await cacheResolver
.setDefaultTtl(TimeSpan.fromMinutes(5))
.setExecutionContext(context)
.use("redis")
.add("user/jose@gmail.com", {
name: "Jose",
age: 20,
});

You can also change the type parameter for compile-time type safety:

await cacheResolver
.setType<string>()
.use("redis")
.add("user/jose@gmail.com", "some-string-value");
info

Note that the CacheResolver is immutable, meaning any configuration override returns a new instance rather than modifying the existing one.

Further information

For further information refer to eridu-tech/cache API docs.