{"library":"prisma-redis-middleware","title":"Prisma Redis Caching Middleware","description":"prisma-redis-middleware is a Prisma middleware designed to cache the results of Prisma queries in Redis, significantly improving application performance by reducing database load. It also provides an in-memory LRU cache as a fallback mechanism. The current stable version is 4.8.0, with frequent patch and minor releases, indicating active development and responsiveness to community needs. Key features include fine-grained cache invalidation, support for custom cache keys, persistence with Redis, and the ability to define specific caching rules for individual Prisma models and methods (e.g., `findUnique`, `findMany`, `count`, `aggregate`, `groupBy`). It allows developers to include or exclude certain models or query methods from being cached, and define custom cache times per model, distinguishing it from simpler caching solutions. The middleware internally leverages `async-cache-dedupe` for efficient request deduplication. Developers must provide their own Redis client implementation, such as `ioredis`, which is a common and recommended choice for robust Redis connectivity.","language":"javascript","status":"active","last_verified":"Thu Apr 23","install":{"commands":["npm install prisma-redis-middleware"],"cli":null},"imports":["import { createPrismaRedisCache } from 'prisma-redis-middleware';","import Prisma from 'prisma';","import Redis from 'ioredis';"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import Prisma from \"prisma\";\nimport { PrismaClient } from \"@prisma/client\";\nimport { createPrismaRedisCache } from \"prisma-redis-middleware\";\nimport Redis from \"ioredis\";\n\nconst redis = new Redis(process.env.REDIS_URL || 'redis://localhost:6379'); // Connects to Redis, uses REDIS_URL or default\n\nconst prisma = new PrismaClient();\n\nconst cacheMiddleware: Prisma.Middleware = createPrismaRedisCache({\n  models: [\n    { model: \"User\", excludeMethods: [\"findMany\"] },\n    { model: \"Post\", cacheTime: 180, cacheKey: \"article\" },\n  ],\n  storage: { type: \"redis\", options: { client: redis, invalidation: { referencesTTL: 300 }, log: console } },\n  cacheTime: 300,\n  excludeModels: [\"Product\", \"Cart\"],\n  excludeMethods: [\"count\", \"groupBy\"],\n  onHit: (key) => {\n    console.log(\"Cache HIT for key:\", key);\n  },\n  onMiss: (key) => {\n    console.log(\"Cache MISS for key:\", key);\n  },\n  onError: (key, error) => {\n    console.error(\"Cache ERROR for key:\", key, error);\n  }\n});\n\nprisma.$use(cacheMiddleware);\n\nasync function main() {\n  // Example usage: Caching a 'findUnique' query for a 'User' model\n  const user = await prisma.user.findUnique({\n    where: { id: 1 },\n  });\n  console.log('Fetched user:', user);\n\n  // Example usage: Querying 'Post' model with custom cache time\n  const posts = await prisma.post.findMany();\n  console.log('Fetched posts:', posts);\n}\n\nmain()\n  .catch((e) => {\n    console.error(e);\n    process.exit(1);\n  })\n  .finally(async () => {\n    await prisma.$disconnect();\n    redis.disconnect();\n  });","lang":"typescript","description":"Demonstrates how to initialize and apply the Prisma Redis caching middleware with `ioredis`, configuring specific model caching rules, excluding certain methods, and logging cache hits/misses.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":null}