A Prisma extension to store queries results in a temporary NoSQL cache. Currently supported storage options are standard memory and AceBase.
Using npm
:
npm i prisma-cache-nosql
If you want to use AceBase, install it as well:
npm i acebase
import { cache, adapterMemory } from 'prisma-cache-nosql';
const adapter = adapterMemory();
const prisma = new PrismaClient().$extends(
cache({
adapter
})
);
import { cache, adapterAceBase } from 'prisma-cache-nosql';
const storage = new AceBase('cache_db');
const adapter = adapterAceBase(storage);
await db.ready();
const prisma = new PrismaClient().$extends(
cache({
adapter
})
);
By default, Prisma will work the same and no value will be cached. If you want to start using the cache, you need to provide some configuration, that may look like this:
{
// If provided, the result of this query will be saved in cache.
// Can also be set: true
set: {
// Time-To-Live in ms
ttl: 1000 * 60,
},
// If provided, a cached value will be used if a non expired one is found
// Can also be get: true
get: {
// Max cache age in ms
max: 1000 * 60 * 5
}
}
This can be done in three different scopes:
This configuration has the less priority. It will be used where no others were specified.
// ...
const prisma = new PrismaClient().$extends(
cache({
default: {
// Here
}
})
);
This one will be used for a specific model.
// ...
const prisma = new PrismaClient().$extends(
cache({
models: {
myModel: {
// Here
}
}
})
);
The most specific one, will be prioritized over all the others:
const result = await prisma.model.findFirst({
cache: {
// Here
}
});
The following methods can be used with cache:
findUnique
findUniqueOrThrow
findFirst
findFirstOrThrow
findMany
count
aggregate
groupBy
adapter
: the storage adapter to use.logLevel
: determines the messages logged. Can bedebug
,log
,warn
,error
.default
: default cache configuration.models
: models specific cache configuration.
Setup the tests db using npm run test:push-schema
and generate Prisma test client with npm run test:generate-client
.
Run the tests using npm run test
.
Please, commit using commitizen so that semantic-release will be able to automatically determine the new package version:
git cz
# or
npm run commit