1.1.0 • Published 4 months ago

prisma-extension-cache-manager v1.1.0

Weekly downloads
-
License
MIT
Repository
github
Last release
4 months ago

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

1.1.0

4 months ago

1.0.0

4 months ago

0.4.0

5 months ago

0.3.0

2 years ago

0.2.2

2 years ago

0.2.1

2 years ago

0.2.0

2 years ago

0.1.0

2 years ago