A caching extension for Prisma, compatible with cache-manager.
- cache-manager compatibility
- Only model queries can be cacheable (no $query or $queryRaw)
- Uses object-code as default key generator, but you can pass a custom one
- In-memory cache is recommended, since types like Date or Prisma.Decimal would be lost if using JSON serialization (maybe will try to use some binary serialization in the future)
Install:
npm i prisma-extension-cache-manager
import { PrismaClient } from '@prisma/client';
import * as cm from 'cache-manager';
import cacheExtension from 'prisma-extension-cache-manager';
async function main() {
const cache = await cm.caching('memory', {
ttl: 10000,
max: 200,
});
const prisma = new PrismaClient().$extends(cacheExtension({ cache }));
await prisma.user.findUniqueOrThrow({
where: {
email: user.email,
},
cache: true, // using cache default settings
});
await prisma.user.findMany({
cache: 5000, // setting ttl in milliseconds
});
await prisma.user.count({
cache: {
ttl: 2000,
key: 'user_count', // custom cache key
},
});
}
main().catch(console.error);