0.0.2 • Published 8 years ago

meercache v0.0.2

Weekly downloads
2
License
MIT
Repository
github
Last release
8 years ago

Meercache

A lightweight caching layer for Meerkat and downstream modules such as Timon

Getting Started

Install Meercache:

npm install meercache --save

Examples

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.

Declare a Meercached Timon Model (models/account.coffee)

{ 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'

Contributing

In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality.

Release History

(Nothing yet)