Skip to content

random42/prisma-extension-cache-manager

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

prisma-extension-cache-manager

A caching extension for Prisma, compatible with cache-manager.

Features

  • cache-manager v6 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

Because cache-manager needs a keyv compatible store, string serialization is mandatory. v8 object serialization is good enough to serialize JavaScript native types like BigInt or Date, but be aware that it cannot serialize Prisma's Decimal type for example.

Installation

Install:

npm i prisma-extension-cache-manager cache-manager cacheable keyv

Usage

import v8 from 'node:v8';
import { PrismaClient } from '@prisma/client';
import { KeyvCacheableMemory } from 'cacheable';
import Keyv from 'keyv';
import * as cm from 'cache-manager';
import cacheExtension from 'prisma-extension-cache-manager';

async function main() {
  const cache = cm.createCache({
    ttl: defaultTtl,
    stores: [
      new Keyv({
        store: new KeyvCacheableMemory({ ttl: defaultTtl }),
        serialize: (x) => v8.serialize(x).toString('base64'),
        deserialize: (s) => v8.deserialize(Buffer.from(s, 'base64')),
      }),
    ],
  });
  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);

Learn more

About

Prisma client extension for caching queries

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published