npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

memcached-lite

v1.0.4

Published

Extremely fast memcached client with consistent hashing & dead server removal & binary protocol implementation.

Downloads

46

Readme

memcached-lite

memcached-lite is a lightweight and fast memcached client for Node.JS. It has been developed due to some pain points with alternatives. It's still in active development and nowhere nas mature as alternatives such as node-memcached. Use with caution.

  • Uses binary memcached protocol rather than the ASCII version.
  • Distributes keys over multiple memcached servers using a consistent hashing algorithm.
  • Auto reconnect / failover mechanisms built in.
  • Pipelines requests for improved throughtput.
  • Can pool connections.

install

npm install memcached-lite

connecting

var memcached = require("memcached-lite");
var client = memcached(servers, options);

servers

The server list can either be a string, array or object. This is directly based on node-memcached and compatible.

  • string: single server. use hostname:port or hostname for default port.
  • array: array of strings, keys will be distributed over these hosts.
  • object: different weights for different servers. {"hostname1": 1, "hostname2": 2} will cause hostname2 to have twica as many load as the hostname1.

options

  • socketNoDelay: (default: true) set no delay setting on underlying sockets. set false to improve throughput but that would increase latency.
  • socketKeepAlive: (default: true) enable keep alive functionality on underlying sockets.
  • retryDelay: (default: 2000) wait milliseconds before trying to reconnect a failed server connection.
  • removeTimeout: (default: null) wait milliseconds before marking a server dead and removing it from distribution. this will cause the keys on this server to be shifted onto others. by default, unavailable servers will be tried indefinately for reconnection.
  • replacementHosts: (default: []) supply additional hostnames for failover. this setting requires a removeTimeout duration, however, client will replace dead servers with one from this list instead of simply removing them.
  • connectionsPerServer: (default: 1) use n connections for each server. note that the client already does pipelining on a single connection, you do not need a lot of connections.
  • enableOfflineQueue: (default: true) if there is no active connection to a specific server, queue commands until we can acquire one.
  • keyPrefix: (default: '') prefix all keys with a string, useful for namespacing keys.
  • hashLongKeys: (default: true) memcached keys can not be larger than 255 bytes lenght. set this true if you want the client to hash larger keys to fit into 255 character length limit.
var client = memcached("localhost:11211", { retryDelay: 5000, removeTimeout: 20000 });

api

client.touch reset ttl on a key

client.touch('key', 10 /** 10 seconds **/, function(err) {});

client.get get value of a key

data field contains the stored data on memcached or undefined if the key is not found. meta is an optional parameter on the callback, it contains 2 fields: meta.cas is a string that can be used in client.cas method. additionally, meta.status contains the response status information returned by server.

client.get('key', function(err, data, meta) {})

client.del delete a key

client.del('key', function(err, meta) {})

client.set, client.add, client.replace store data on server. set always sets the value, add only works if the specified key does not exist on the server and replace works when the key exists.

value can be a string, buffer, date, boolean, number or arbitrary object that can be serialized with JSON. client will make sure that you receive the object in its original form on client.get calls.

client.set('key', value, 10 /** 10 seconds lifetime **/, function(err, meta) {})

client.cas set a key only if matches the cas value obtained from other methods (meta.cas)

client.cas('key', value, ttl, cas, function(err, meta) {})

client.append, client.prepend append or prepend data to an already stored value.

client.append('key', value, function(err, meta) {});
client.prepend('key', value, function(err, meta) {});

client.incr, client.decr increment or decrement numeric value on a key

  • delta the increment / decrement amount.
  • ttl the default ttl value if key does not already exists
  • initial default value to work on if the key does not already exists.
client.incr('key', delta, ttl, initial, function(err, count) {})

author

Ekin Koc

license

MIT