A Promise-base Memcached client library for Node.js written in Typescript
$ npm install memcached-node
or
$ yarn add memcached-node
import {Memcached} from 'memcached-node'
let memcached = new Memcached('localhost:11211')
You can either use these types for configuring the servers.
// 1. String
let memcached = new Memcached('localhost:11211')
// 2. Array
let memcached = new Memcached(['localhost:11211', 'localhost:11212'])
// 3. Object
let memcached = new Memcached({
'localhost:11211': 200,
'localhost:11212': {
weight: 200
},
'localhost: 11213': {
vnode: 400,
timeout: 300
}
})
You can use either connection pool or connection.
let memcached = new Memcached('localhost:11211')
await memcached.createPool()
await memcached.get('keke')
// or use single connection
let connection = Memcached.createConnection('localhost:11211')
await connection.connect()
await 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.
You can use raw string inputs(default) or 3 ways to serialize・deserialize.
const resp = await connection.set("key", "value")
const json = {
value: "hello"
}
const resp = await connection.set("key", json, {mode:"json"})
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.basicAuth
: undefined, username/password authentication. See the details in Authentication
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.These are essential methods that you should know when operating with memcached
.
Connect to the servers given when instanting.
await memcached.createPool()
let connection = await memcached.createConnection()
If you want to create a connection directly without using the connection pool, use Connection.createConnection()
.
Close all connections to the given servers.
memcached.clean()
let connection = memcached.getConnection()
Don't forget to .close()
your connection after you finish your execution.
await connection.connect()
connection.close()
let isReady = connection.isReady()
connection.remove('localhost:11211')
These are API's that both Memcached
and Connection
uses.
These are command to store an item. Replace memcached
to connection
if you are running the method on a connection.
let resp = await memcached.set('keke', 'pupu')
Also you can pass these arguments too.
let resp = await memcached.add('keke', 'pupu')
Also you can pass these arguments too.
let resp = await memcached.replace('keke', 'pupu')
Also you can pass these arguments too.
let resp = await memcached.append('keke', 'pupu')
Also you can pass these arguments too.
let resp = await memcached.prepend('keke', 'pupu')
Also you can pass these arguments too.
let resp = await memcached.cas('keke', 'id')
Also you can pass these arguments too.
These are command to restrieve an item.
var resp = await memcached.get('hoge')
var resp = await memcached.get(['hoge'])
var resp = await memcached.gets('hoge')
var resp = await memcached.gets(['hoge'])
let resp = await memcached.delete(['hoge'])
let resp = await memcached.touch(['hoge'])
Also you can pass these arguments too.
let resp = await memcached.gat(['hoge'])
let resp = await memcached.gats(['hoge'])
Get stats of your server.
let resp = await memcached.stats()
These are useful events that will be emited when specific event happens on the connection.
close
: When a connection is closedEmitted when a socket connecting or connection has an error.
Arguments:
Connection
: the connection which closed in the connection poolServer
: the server which droped lastmemcached.on('close', (connection, server) => {
console.log(`Connection closed: error: ${err}, url: ${server.url}`)
})
drop
: When a server in the connection is closedmemcached.on('drop', (connection: Connection, server: Server) => {
console.log(`server ${server.url} is droped`)
})
maxConnection
: When the number of the connections in the connection pool reaches to poolsizememcached.on('maxConnection', (poolsize: number) => {
console.log(`connection reached the poolsize: ${poolsize}`)
})
Note that this event will note be triggered when memcached initialization.
close
: When all server is droped is closedconnection.on('close', (connection:Connection) => {
console.log('all server in the connection is closed')
})
drop
: When a server in the connection is removedconnection.on('drop', (connection: Connection, server: Server) => {
console.log(`server ${server.url} is droped`)
})
Memcached supports username/password authentications. When initializing the Memcached, pass the basicAuth option.
let memcached = new Memcached({
'localhost:11211': {
basicAuth: {
username: 'keke',
password: 'piyo'
}
},
'localhost:11212': {
basicAuth: {
username: 'keke',
password: 'huga'
}
}
})
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.
The driver is released under the Apache 2.0 license. See the LICENSE for more information.
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 |