Socket
Book a DemoInstallSign in
Socket

feathers-memory-cache

Package Overview
Dependencies
Maintainers
1
Versions
5
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

feathers-memory-cache

Hooks for adding an in-memory, scopable LRU-cache in FeathersJS services

0.3.0
latest
Source
npmnpm
Version published
Weekly downloads
2
-91.3%
Maintainers
1
Weekly downloads
 
Created
Source

Introduction

This module creates a cache is shared within the feathers instance as a global state. For multi-instance, multi-container caching, use feathers-redis-cache instead. With this cache, scaling your app to 4 containers will produce 4 independent caches.

By default, the cache's scope is global but can be setup on a per-service basis or even more granular.

Quick Start

To cache the /books service, simply add the following hooks


// src/services/books/books.hooks.js
const { cacheBefore, cacheAfter } = require('feathers-memory-cache');

module.exports = {
  before: {
    all: [
        cacheBefore()
    ],
    //...
  },

  after: {
    all: [
        cacheAfter()
    ],
    //...
  },

Advanced usage

To cache the /books service with authentication, make sure the cacheBefore is after the authentication check. For example:


 before: {
    all: [
      authenticate('basic'),
      cacheBefore(),      
    ],
    //...
 }

To modify the TTL or the max cache size:


 before: {
    all: [
      cacheBefore({
        max:10,  // Cache will max hold 10 elements
        maxAge: 300000 // TTL set to 5min in milliseconds
      }),      
    ],
    //...
 }

To apply different cache configurations to different routes, add a scope parameter:


// /books/books.hooks.js
    before: {
        all: [
        cacheBefore({
            scope:'books'
            max:10,  // Cache will max hold 10 elements
            maxAge: 300000 // TTL set to 5min in milliseconds
        }),      
        ],
        //...
    },
    after: {
        all: [cacheAfter({scope:'books'})]
    }

// /librarians/librarians.hooks.js
    before: {
        all: [
        cacheBefore({
            scope:'other-scope-for-librarians'
            max:5,  // Cache will max hold 5 elements
            maxAge: 1000 // TTL set to 1 second
        }),      
        ],
        //...
    },
    after: {
        all: [cacheAfter({scope:'other-scope-for-librarians'})]
    }

You can also use two caches in the same service, you can do the following. Make sure to close out BOTH scopes in the after hook


// /books/books.hooks.js
    before: {
        all: [
        iffElse(
            isAuthed(),[
                cacheBefore({
                    scope:'auth-cache'
                    max:10,  // Cache will max hold 10 elements
                    maxAge: 300000 // TTL set to 5min in milliseconds
                }), 
            ],[
                cacheBefore({
                    scope:'auth-no-cache'
                    max:100,  // Cache will max hold 10 elements
                    maxAge: 1000 // TTL set to 5min in milliseconds
                }), 
            ])
        ],
        //...
    },
    after: {
        all: [
            iffElse(isAuthed(),[cacheAfter({scope:'auth-cache'})],[cacheAfter({scope:'auth-no-cache'})])
        ],
        //...
    },

To set a custom hash to the cache key for your scoped cache:

    // /books/books.hooks.js
    before: {
        all: [
            cacheBefore({
                customHash:(ctx)=>`${Math.floor(Math.random*1000)}`
            }),      
        ],
        //...
    }

To set a custom keying function:

    // /books/books.hooks.js
    before: {
        all: [
            cacheBefore({
                key:(ctx)=>ctx.method+ctx.path+ctx.id
            }),      
        ],
        //...
    }

NOTE: if you override key or customHash it will override all of the services using that cache, even if the scope is unspecified and thus, global.

Keywords

feathers

FAQs

Package last updated on 04 Dec 2021

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.