Simple to use and universal cache layer for Sequelize
npm install sequelize-transparent-cache





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
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`
`javascript
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.
* Usage with memcached
* Usage with ioredis
Object returned by cache() call contains wrappers for limited subset of sequelize model or instance methods.
Instance:
* save()
* update()
* destroy()
* reload()
Model:
* Automatic cache methods - does not require cache key: cache()create()
* findByPk()
* upsert()
* - EXPERIMENTALinsertOrUpdate()
* - EXPERIMENTALcache(key)
* Manual cache methods - require cache key: findAll()
* findOne()
* clear()
* - remove data associated with key from cache
In addition, both objects will contain client() method to get cache adaptor.
* memcached
* memcache-plus
* ioredis
* variable
You can easy write your own adaptor. Each adaptor must implement 3 methods:
* get(path: Array
Checkout existed adaptors for reference implementation.