GithubHelp home page GithubHelp logo

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
})

// Register and wrap your models:
// withCache() will add cache() methods to all models and instances in sequelize v4
const User = withCache(sequelize.import('./models/user'))

await sequelize.sync()

// Cache result of arbitrary query - requires cache key
await User.cache('active-users').findAll({
  where: {
    status: 'ACTIVE'
  }
})

// Create user in db and in cache
await User.cache().create({
  id: 1,
  name: 'Daniel'
})

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

// Update in db and cache
await user.cache().update({
  name: 'Vikki'
})

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.

sequelize-transparent-cache's Projects

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.