memcached-node
A Promise-base Memcached client library for Node.js written in Typescript
Table of contents
- Install
- Setting up the client
- Pooling connections vs Single connection
- API
- Methods
- Commands
- Storage commmands
- {memcached,connection}.set: Store the data
- {memcached,connection}.add: Store the data only if the server doesn't already hold data for this key
- {memcached,connection}.replace: Store the data only if the server does hold data for this key
- {memcached,connection}.append: Add the data to existing key after existing data
- {memcached,connection}.prepend: Add the data to existing key before existing data
- {memcached,connection}.cas: Store the data only if no one elese has updated since I last fetched it
- Retrieval commands
- Deletion
- Touch
- Get and Touch
- Stats
- Storage commmands
- Event listening
- Authentication
- Contribution
- Author
- LICENSE
- Other libraries
- Futher readings
Install
$ npm install memcached-node
or
$ yarn add memcached-node
Setting up the client
You can either use these types for configuring the servers.
- String: For single running instance.
- Array: For cluster of Memcached servers.
- Object: For cluster of Memcached servers with user options. See details of the Options for detail.
// 1. String // 2. Array // 3. Object
Pooling connections vs Single connection
You can use either connection pool or connection.
await memcached.createPoolawait memcached.get'keke' // or use single connection await connection.connectawait connection.get'keke'
Because the connection will take cost, I recommend to use the connection pool and share the connection between clients.
Each time, you run a command by Memcached
method, it will grab a idle connection and release it after the command is done.
Serialize・Deserialize
You can use raw string inputs(default) or 3 ways to serialize・deserialize.
0. String
1. JSON
Options
MemcachedOptions: Options for Memcached
initSize
: 1, the size of the init connection.poolSize
: 10, maximun size of the connection pool.removeDeadServer
: true, remove if the server is dead or closed.wait
: false, if wait to get connection available.waitTimeout
: 1000, the time to wait for available connection.
ConnectionOptions: Options for each connection
basicAuth
: undefined, username/password authentication. See the details inAuthentication
section.timeout
: 3000, the time after which Memcached sends a connection timeout(in milliseconds).vnode
: undefined, Virtual node in the hashring.weight
: undefined, the weight of the node in the hashring.
API
Methods
These are essential methods that you should know when operating with memcached
.
Memcached
.createPool: Generates connections for the given server(s).
Connect to the servers given when instanting.
await memcached.createPool
.createConnection: Generates a connection for given server(s).
If you want to create a connection directly without using the connection pool, use Connection.createConnection()
.
.clean: Close all connections in the pool
Close all connections to the given servers.
memcached.clean
.getConnection: Get an idle connection
Don't forget to .close()
your connection after you finish your execution.
Connection
.connect: Generates connection for the given servers(s).
await connection.connect
.close: Close the connection
connection.close
.isReady: Check if the connection is ready to execute commands
.remove: Remove a server for the connection
connection.remove'localhost:11211'
Commands
These are API's that both Memcached
and Connection
uses.
Storage commmands
These are command to store an item. Replace memcached
to connection
if you are running the method on a connection.
{memcached,connection}.set: Store the data
Also you can pass these arguments too.
- Compressed: boolean.
- Expiration time: number.
{memcached,connection}.add: Store the data only if the server doesn't already hold data for this key
Also you can pass these arguments too.
- Compressed: boolean.
- Expiration time: number.
{memcached,connection}.replace: Store the data only if the server does hold data for this key
Also you can pass these arguments too.
- Compressed: boolean.
- Expiration time: number.
{memcached,connection}.append: Add the data to existing key after existing data
Also you can pass these arguments too.
- Compressed: boolean.
- Expiration time: number.
{memcached,connection}.prepend: Add the data to existing key before existing data
Also you can pass these arguments too.
- Compressed: boolean.
- Expiration time: number.
{memcached,connection}.cas: Store the data only if no one elese has updated since I last fetched it
Also you can pass these arguments too.
- Compressed: boolean.
- Expiration time: number.
Retrieval commands
These are command to restrieve an item.
{memcached,connection}.get: Get value for key(s)
{memcached,connection}.gets: Get value for key(s) using CAS
Deletion
{memcached,connection}.delete: Delete the item by key
Touch
{memcached,connection}.touch: Update the expiration time of an exisiting item
Also you can pass these arguments too.
- Expiration time: number.
Get and Touch
{memcached,connection}.gat: Get value for key(s) and update the expiration time
{memcached,connection}.gats: Get value for key(s) and update the expiration time using CAS
Stats
{memcached,connection}.stats: Get the stats from your servers
Get stats of your server.
Event listening
These are useful events that will be emited when specific event happens on the connection.
Memcached
close
: When a connection is closed
Emitted when a socket connecting or connection has an error.
Arguments:
Connection
: the connection which closed in the connection poolServer
: the server which droped last
memcached.on'close',
drop
: When a server in the connection is closed
memcached.on'drop',
maxConnection
: When the number of the connections in the connection pool reaches to poolsize
memcached.on'maxConnection',
Note that this event will note be triggered when memcached initialization.
Connection
close
: When all server is droped is closed
connection.on'close',
drop
: When a server in the connection is removed
connection.on'drop',
Authentication
Memcached supports username/password authentications. When initializing the Memcached, pass the basicAuth option.
Contribution
I welcome and contribution. Please open an Issue or a Pull Request.
Creating an Issue before sending a Pull request is desirable so make sure that the implementation is surely needed. Thank you in advance.
Author
LICENSE
The driver is released under the Apache 2.0 license. See the LICENSE for more information.
Other libraries
List of other memcached JS libraries(2020/04/20).
Repository | stars | Notes |
---|---|---|
3rd-Eden/memcached | 1.2k | Defacto standard memcached library |
electrode-io/memcache | 21 | From Facebook |
googleapi/nodejs-memcache | 4 | From Google. Born in 2020/04/01 |
Futher readings
- memcached/protocol.txt
- Official memcached protocol document