A lightweight caching layer for Meerkat and downstream modules such as Timon
Install Meercache:
npm install meercache --save
Meercache was written to facilitate judicious caching of MongoDB documents retrieved via Meerkat and downstream modules such as Timon. Meercache should only be leveraged in specific use cases. Particularly where collections are both bounded, and are rarely updated or removed. Even collections limited to thousands of documents may be too large. Meercache is a local, in-memory cache which can have a dramatic positive effect on performance and scale. However, immediate invalidation can be tricky and tedious across clusters.
{ extend, pick } = require 'lodash'
keygen = require 'keygen'
cache = require('meercache') [ 'id' ], [ 'identifier' ], [ 'email' ], 300
Account = require('timon').extend module, 'account',
for_id: (id, failure, success) ->
cache.proxy(@, @find_one, 'id') { id }, failure, success
for_identifier: (identifier, failure, success) ->
cache.proxy(@, @find_one, 'identifier') { identifier }, failure, success
for_creds: (identifier, secret, failure, success) ->
[ success, failure ] = [ failure, success ] unless success?
@for_identifier identifier, failure, (account) ->
success if account?.secret is secret then account else null
for_email: (email, failure, success) ->
cache.proxy(@, @find_one, 'email') { email }, failure, success
remove: (account, failure, success) ->
cache.invalidate(@, @super.remove, 'id') id: @id_for account, failure
Account.default 'insert', ->
identifier: keygen.url keygen.small
secret: keygen.url keygen.large
extend Account,
cache: pick cache, 'flush', 'stats'
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality.
(Nothing yet)