Skip to content

Kaimbelic/sequelize-transparent-cache

 
 

Repository files navigation

sequelize-transparent-cache

Build Status Coverage Status JavaScript Style Guide Code Climate npm version Dependency Status

Simple to use and universal cache layer for Sequelize.

  • Abstract: does not depends on underlying database, or cache specific
  • Transparent: objects returned from cache are regular Sequelize instances with all your methods
  • Explicit: all calls to cache comes through cache() method
  • Lightweight: zero additional dependencies

Installation

Install sequelize-transparent-cache itself:

npm install --save sequelize-transparent-cache

Find and install appropriate adaptor for your cache system, see "Available adaptors" section below. In this example we will use ioredis

npm install --save sequelize-transparent-cache-ioredis

Example usage

const Redis = require('ioredis');
const redis = new Redis();

const RedisAdaptor = require('sequelize-transparent-cache-ioredis');
const redisAdaptor = new RedisAdaptor({
  client: redis,
  namespace: 'model',
  lifetime: 60 * 60
});

const sequelizeCache = require('sequelize-transparent-cache');
const { withCache } = sequelizeCache(redisAdaptor);

const Sequelize = require('sequelize');
const sequelize = new Sequelize('database', 'user', 'password', {
  dialect: 'mysql',
  host: 'localhost',
  port: 3306
});

const User = withCache(sequelize.import('./models/user'));

await sequelize.sync();

await User.cache().create({
  id: 1,
  name: 'Daniel'
});

const user = await User.cache().findByPk(1);

await user.cache().save();

await user.cache().clear();

Look for all examples applications in examples folder.

Methods

Object returned by cache() call contains wrappers for limited subset of sequelize model or instance methods.

Instance:

Model:

In addition, both objects will contain client() method to get cache adaptor.

Available adaptors

You can easy write your own adaptor. Each adaptor must implement 3 methods:

  • get(path: Array<string>): Promise<object>
  • set(path: Array<string>, value: object): Promise<void>
  • del(path: Array<string>): Promise<void>

Checkout existed adaptors for reference implementation.

About

Simple to use and universal cache layer for Sequelize

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • TypeScript 96.7%
  • JavaScript 3.3%