A memcache client for node using the binary protocol and SASL authentication



MemJS is a pure Node.js client library for using memcache, in particular, the MemCachier service. It uses the binary protocol and support SASL authentication.

Documentation can be found here:

  1. Requirements
  2. Installation
  3. Configuration
  4. Usage
  5. How to help

MemJS is tested to work with version 0.6 or higher of Node.js.

MemJS is available from the npm registry:

$ npm install memjs

To install from git:

$ git clone git://
$ cd memjs
$ npm link

MemJS was designed for the MemCachier memcache service but will work with any memcache server that speaks the binary protocol. Many software repositories have a version of memcacached available for installation:

$ apt-get install memcached
$ brew install memcached

MemJS understands the following environment variables:

  • MEMCACHIER_SERVERS - used to determine which servers to connect to. Should be a comma separated list of _[hostname:port]_.
  • MEMCACHIER_USERNAME - if present with MEMCACHIER_PASSWORD, MemJS will try to authenticated to the server using SASL.
  • MEMCACHIER_PASSWORD - if present with MEMCACHIER_USERNAME, MemJS will try to authenticated to the server using SASL.

Environment variables are only used as a fallback for explicit parameters.

You can start using MemJS immediately from the node console:

$ var memjs = require('memjs')
$ var client = memjs.Client.create()
$ client.get('hello', function(err, val) { console.log(val); })
client.set('hello', 'world', function(errval) {
}, 600);

The set(key, val, callback, expiration) function accepts the following parameters.

  • key: key to set
  • val: value to set
  • callback: a callback invoked after the value is set
    • err : error
    • val : value retrieved
  • expiration: time interval, in seconds, after which memcached will expire the object
client.get('hello', function(errval) {

The get(key, callback) function accepts the following parameters.

  • key: key to retrieve
  • callback: a callback invoked after the value is retrieved
    • err : error
    • val : value retrieved

The best way to contribut to the project is by reporting bugs and testing unpublished versions. If you have a staging or development app, the easiest way to do this is using the git repository as your memjs package dependency---in package.json:

  "name": "MyAppName",
  "dependencies": {
    "memjs": "git://"

If you find a bug, please report as an issue. If you fix it, please don't hesitate to send a pull request on GitHub or via e-mail.

Feature suggestions are also welcome! These includes suggestions about syntax and interface design.

Finally, a great way to contribute is to implement a feature that's missing and send a pull request. The list below contains some planned features that have not been addressed yet. You can also implement a feature not a list if you think it would be good.

  • Support flags
  • Support prepend, append
  • Support multi commands
  • Support touch
  • Support CAS
  • Consistent hashing for keys and/or pluggable hashing algorithm

Copyright (c) 2012 Amit Levy, MemCachier. See LICENSE for details.