1.0.3 • Published 3 months ago

@specter-labs/fastify-cache v1.0.3

Weekly downloads
-
License
ISC
Repository
-
Last release
3 months ago

Fastify Cache

A flexible caching plugin for Fastify that provides easy-to-use HTTP response caching.

Installation

npm install @specter-labs/fastify-cache

Usage

import fastify from 'fastify'
import fastifyCache from '@specter-labs/fastify-cache'

// Implement your own storage adapter
const redisStorageAdapter = {
  async get({ key }) { /* implementation */ },
  async set({ key, data, expiresIn }) { /* implementation */ },
  async remove({ pattern }) { /* implementation */ }
}

const app = fastify()

// Register the plugin
app.register(fastifyCache, {
  storageAdapter: redisStorageAdapter,
  ttl: 300, // 5 minutes default TTL
  prefix: 'my-app:cache' // custom prefix
})

// Use in routes
app.get('/data', {
  config: {
    cache: {
      ttl: 60 // Cache this route for 60 seconds
    }
  }
}, async (request, reply) => {
  // This response will be cached
  return { data: 'cached data' }
})

// Manually interact with cache
app.get('/manual-cache', async (request, reply) => {
  const cachedData = await app.cache.get('my-key')
  
  if (cachedData) {
    return cachedData
  }
  
  const data = { freshData: true }
  await app.cache.set('my-key', data, 120)
  
  return data
})

// Invalidate cache
app.post('/invalidate', async (request, reply) => {
  await app.cache.invalidate('data')
  return { success: true }
})

Storage

In memory

This plugin provides a in-memory storage adapter instance that can be used out-of-the-box.

import fastify from 'fastify'
import fastifyCache, { defaultStorageAdapter } from '@specter-labs/fastify-cache'

const app = fastify();

app.register(fastifyCache, {
  storageAdapter: defaultStorageAdapter,
  ttl: 60 * 5 // 5 minutes
})

API

Plugin Options

  • storageAdapter: Required. An object implementing the IStorageAdapter interface
  • ttl: Optional. Default time-to-live for cached items in seconds
  • keyGenerator: Optional. Function to generate cache keys from requests
  • prefix: Optional. Prefix for cache keys

Route Configuration

{
  config: {
    cache: {
      ttl: 60, // TTL in seconds
      keyGenerator: (req) => `custom:${req.url}` // Custom key generator
    }
  }
}

License

ISC

1.0.3

3 months ago

1.0.2

3 months ago

1.0.1

3 months ago

1.0.0

3 months ago