nodejs之memcached连接池

本文介绍了一个使用 Node.js 实现的 Memcached 连接池方案,该方案利用了 'generic-pool' 和 'memcached' 库来管理连接资源,有效地提高了 Memcached 客户端的复用效率并减少了频繁创建和销毁连接所带来的开销。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

nodejs之memcached连接池:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/**
 * memcached 连接池
 **/
var options = {
    //'host': ['localhost:11211'],
    'host': 'localhost:11211',
    'connectionLimit': '2',
    'timeout' : 50000
};
var poolModule = require('generic-pool');
console.log("init pool for memcached start..");
var pool = poolModule.Pool({
    name : 'memcached',
    create : function(callback){
        var Memcached = require('memcached');
        memcached = new Memcached(options.host, {debug: true});
        memcached.on("failure", function (detail) {})
                 .on('connect', function (detail) {})
                 .on('reconnect', function (detail) {})
                 .on('reconnecting', function (detail) {})
                 .on('remove', function (detail) {})
                 .on('issue', function (detail) {});
        callback(null, memcached);
    },
    destory : function(client){
        if(client.connected){
            try{
                client.end();
            }
            catch(err){
                console.log('Failed to memcached connection: ' + err);
            }
        }
    },
    max : options.connectionLimit,
    idleTimeoutMillis : options.timeout,
    log : false
});
console.log("init pool for memcached end....");
 
exports.set = function(key, val, expire, callback){
    pool.acquire(function(err, client){
        if(err){
            callback(err);
            return;
        }
        if(!expire) expire = 172800;
        client.set(key, val, expire, function(err, data){
            pool.release(client);
            if(err){
                callback(err, null);
                return;
            }
            callback(err, data);
        });
    });
};
 
exports.get = function(key, callback){
    pool.acquire(function(err, client){
        if(err){
            callback(err);
            return;
        }
        client.get(key, function(err, data){
            pool.release(client);
            if(err){
                callback(err, null);
                return;
            }
            callback(err, data);
        });
    });
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值