Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

memjs

memcachier484.1kMIT1.3.1TypeScript support: definitely-typed

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

cache, memcache, memcached, MemCachier

readme

MemJS

npm Build Status Gitter

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: https://memjs.netlify.com/

TOC

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

Requirements

Supported Node.js versions

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

Installation

MemJS is available from the npm registry:

$ npm install memjs

To install from git:

$ git clone git://github.com/alevy/memjs.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 memcached available for installation:

Ubuntu

$ apt-get install memcached

OS X

$ brew install memcached

Configuration

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.
  • MEMCACHE_USERNAME - used if MEMCACHIER_USERNAME is not present
  • MEMCACHE_PASSWORD - used if MEMCACHIER_PASSWORD is not present

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

Usage

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

If callbacks are not specified, the command calls return promises.

Settings Values

client.set('hello', 'world', {expires:600}, function(err, val) {

});

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

  • key: key to set
  • val: value to set
  • options: an object of options. Currently supports only the key expires, which is a time interval, in seconds, after which memcached will expire the object
  • callback: a callback invoked after the value is set
    • err : error
    • val : value retrieved

Getting Values

client.get('hello', function(err, val) {

});

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

Note that values are always returned as Buffers, regardless of whether a Buffer or String was passed to set.

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

Contributing

The best way to contribute 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://github.com/alevy/memjs.git#master"
    ...
  }
}

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.

TODOS

  • Support flags
  • Support multi commands
  • Support CAS
  • Consistent hashing for keys and/or pluggable hashing algorithm

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

changelog

Change Log

Version 1.2.0

  • Add support for retry_delay
  • Fix failover

Version 1.1.0

  • Fix promise support

Version 1.0.0

  • Deprecation for end of function arguments no longer supported. (PR #99)
  • The option argument is no longer mandatory

Version 0.10.2

  • Fixes a backwards compatibility bug in set (issue #94)

Version 0.10.1

  • Add support for value in decrement callback (issue #88)
  • Better authentication error handling (PR #91)

Version 0.10.0

  • Fix issue with too many outstanding socket timeouts (issue #52)
  • Add support for touch
  • Add support for append
  • Add support for prepend
  • Fix lint issues across code base
  • Update microtime dependency

Version 0.9.1

  • Fix issue with no completing SASL auth before sending a request (issue #65)
  • Handle timeout for SASL authentication (issue #79)
  • Fix timeout handling for normal operations (issue #80)

Version 0.9.0

  • Deprecate Node version 0.8
  • Add eslint to test suite and fix many linting issues

Version 0.8.9

  • Allow custom initial value for increment/decrement

Version 0.8.8

  • Properly preserve extras with non-string bytes

Version 0.8.7

  • Fix global variable leak

Version 0.8.6

  • Add support for stats(key)

Version 0.8.5

  • Add quit command
  • Fixes to stats command
  • Fixes to flush command

Version 0.8.4

  • Don't force conversion of value to string in set, add, replace, etc (issue #44)

Version 0.8.3

  • Bug fix in dataType parse in response header

Version 0.8.2

  • Bug fix in handling error cases when retries > 1

Version 0.8.1

  • Support failover
  • Fix corner case bugs when socket becomes undefined

Version 0.8.0

  • Instead of emitting an error on socket timeout, call error.

Version 0.7.2

  • Fixed showstopping typo!

Version 0.7.1

  • Properly pass errors to callback on server error

Version 0.7.0

  • Various bug fixes
  • Increment and decrement commands

Version 0.6.0

  • Asynchronous response handling

Version 0.5.1

  • Fixed retry logic on errors

Version 0.5.0

  • Better support for concurrent accesses
  • Fixed improper ordering of callbacks when there are multiple outstanding requests.
  • Request-specific expire (overrides default) in set/add/replace

Version 0.4.0

  • Support for unicode keys, extras and values.
  • Extensible logging.

Version 0.3.1

  • Fixed saslAuth to include mechanism (thanks to @shokai)

Version 0.3.0

  • Added err parameter to all callbacks from client
  • Flush command