# memjs

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

Latest version **1.3.2** (published 2024-01-11) · MIT license · 0 weekly downloads

## Install

```sh
npm install memjs
pnpm add memjs
yarn add memjs
bun add memjs
```

## Health

**Score 23/100 (F)** — status: abandoned.

Positive: has types package; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.3.2 |
| Published | 2024-01-11 |
| First published | 2012-05-29 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | separate (@types/memjs) |
| Module format | CommonJS |
| Node | >=0.10.0 |
| Dependencies | 0 |
| Unpacked size | 86.4 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 208 |
| Author | Amit Levy |
| Maintainers | alevy, saschatrifunovic |
| Keywords | cache, memcache, memcached, MemCachier |

## Links

- npm: https://www.npmjs.com/package/memjs
- Repository: https://github.com/memcachier/memjs
- Homepage: http://github.com/memcachier/memjs
- Issues: https://github.com/memcachier/memjs/issues
- npm.io page: https://npm.io/package/memjs

## Alternatives

- [memory-cache](https://npm.io/package/memory-cache.md) — 795.0K weekly downloads
- [@httptoolkit/proxy-agent](https://npm.io/package/@httptoolkit/proxy-agent.md) — 11.2K weekly downloads
- [express-cache-controller](https://npm.io/package/express-cache-controller.md) — 5.3K weekly downloads
- [http-cache-middleware](https://npm.io/package/http-cache-middleware.md) — 4.5K weekly downloads
- [cache2](https://npm.io/package/cache2.md) — 1.5K weekly downloads

## Recent versions

- 1.3.2 (latest) — 2024-01-11
- 1.3.1 — 2023-03-28
- 1.3.0 — 2021-01-15
- 1.2.2 — 2019-06-25
- 1.2.0 — 2018-03-22
- 1.1.1 — 2018-03-19
- 1.1.0 — 2017-12-26
- 1.0.0 — 2017-11-23
- 1.0.0-rc.1 — 2017-06-04
- 0.10.2 — 2017-04-06
- 0.10.1 — 2017-04-04
- 0.10.0 — 2016-05-03
- 0.9.1 — 2016-04-21
- 0.9.0 — 2016-01-04
- 0.8.9 — 2015-12-23
- … 23 more at https://npm.io/package/memjs/versions

## README

MemJS
=====

[![npm](http://img.shields.io/npm/v/memjs.svg)](https://www.npmjs.com/package/memjs)
[![Build Status](https://secure.travis-ci.org/alevy/memjs.png)](http://travis-ci.org/alevy/memjs?branch=master)
[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/alevy/memjs?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)

MemJS is a pure Node.js client library for using memcache, in particular, the
[MemCachier](http://memcachier.com/) service. It
uses the binary protocol and support SASL authentication.

Documentation can be found here: [https://memjs.netlify.com/](https://memjs.netlify.com/)

## TOC

  1. [Requirements](#requirements)
  2. [Installation](#installation)
  3. [Configuration](#configuration)
  4. [Usage](#usage)
  5. [How to help](#contributing)

## 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

``` javascript
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

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

});
```

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

Note that values are always returned as `Buffer`s, 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](https://github.com/alevy/memjs/issues/new).
If you fix it, please don't hesitate to send a pull request on GitHub or via
[e-mail](http://www.kernel.org/pub/software/scm/git/docs/git-request-pull.html).

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 ##

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

---
_Source: https://npm.io/package/memjs · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
