@apollo/utils.keyvadapter
v4.0.1
Published
Keyv adapter implementing Apollo's KeyValueCache interface
Readme
KeyvAdapter class
The KeyvAdapter class is a simple wrapper for Keyv which implements the KeyValueCache interface from the @apollo/utils.keyvaluecache package. This class is intended for use by (but not limited to) Apollo Server's cache. Keyv supports a number of useful adapters like Redis, Mongo, SQLite, etc.
Usage
Here's an example of using a Redis store for your ApolloServer cache:
Install the necessary packages:
npm install @apollo/utils.keyvadapter keyv @keyv/redisNote: The latest version of this library (v4 and up) only works with Keyv version 5. In order to work with the older version 4 of Keyv, version 3 of this library can be used instead.
In Apollo Server v3:
import { ApolloServer } from "apollo-server";
import { KeyvAdapter } from "@apollo/utils.keyvadapter";
import Keyv from "keyv";
import KeyvRedis from "@keyv/redis";
new ApolloServer({
cache: new KeyvAdapter(new Keyv({ store: new KeyvRedis("redis://...") })),
});In Apollo Server v4:
import { ApolloServer } from "@apollo/server";
import { KeyvAdapter } from "@apollo/utils.keyvadapter";
import Keyv from "keyv";
import KeyvRedis from "@keyv/redis";
new ApolloServer({
cache: new KeyvAdapter(new Keyv({ store: new KeyvRedis("redis://...") })),
});Options
disableBatchReads
By default, KeyvAdapter will use DataLoader's batching functionality in order to request a list of keys when possible.
- If your
Keyv.storeimplementsgetMany, this will be called with the list of keys aggregated byDataLoader. - If your
Keyv.storedoes not implementgetMany,getwill be called in parallel for each key (awaiting aPromise.all()).
Redis.Cluster from ioredis does not support mget (and thus, store.getMany is broken in this case), so batching should be disabled like so:
new ApolloServer({
cache: new KeyvAdapter(new Keyv({ store: new KeyvRedis("redis://...") }), {
disableBatchReads: true,
}),
});