nodejs之memcache连接池应用方法

花了二天时间才测试成功 NODEJS技术太新了点 中英文的资料都少 所以记录下正确的nodejs之memcache连接池应用方法方便后来人 
按理说memcached应该自带有连接池 但是不知道为什么总是不正确 外面再套一个暂时正常了 或许以后会有更方便的方法 先用着 欢迎指正

module.exports = MemCache78;

var EventEmitter = require(‘events‘).EventEmitter;

var Util = require(‘util‘);

Util.inherits(MemCache78, EventEmitter);

var Q = require(‘q‘);

var MemCache = require(‘memcached‘);

var poolModule = require(‘generic-pool‘);

function  MemCache78( port,host ,max) {
EventEmitter.call(this);

this.host = host;

this.port = port;

this.max=max||10;

this.client = poolModule.Pool({

name     : ‘mem‘,

create   : function(callback) {

if(self.port===0){

callback(null, null);

return;

}

var client = new MemCache(host+‘:‘+port, {poolSize:2,reconnect:1000,retry:1000});

callback(null, client);

},

destroy  : function(client) {

},

max      : this.max,

idleTimeoutMillis : 30000,

priorityRange : 3,log:false

});

return this;

}{

MemCache78.prototype.get = function (key) {

var def = Q.defer();

var self = this;

if (this.port === 0) {

console.log("memcache.port is 0");

def.resolve(null);

return def.promise;

}

//var client = new MemCache(self.host+‘:‘+self.port, {poolSize:2});

this.client.acquire(function (err, client) {

client.get(key, function (err, reply) {

self.client.release(client);

if(key=="keynotexists4"){

console.log("keynotexists4"+reply);

console.log(err);

}

if (err) {

def.reject(new Error(err));

console.error(‘memcache GetData Error: ‘ + err + key);

return;

}

//qq云没有返回undef

if (reply == undefined)reply = null;

//unde 和null都可以用!reply判断

def.resolve(reply);

});

});

return def.promise;

};

时间: 2024-12-06 03:43:23

nodejs之memcache连接池应用方法的相关文章

nodejs + redis/mysql 连接池问题

nodejs + redis/mysql 连接池问题 需不需要连接池 连接池的作用主要是较少每次临时建立连接所带来的开销.初步一看,nodejs运行单线程上,它不能同时使用多个连接,乍一看是不需要连接池的.但是这只是我们初步下意识的感觉,下面我们详细分析来看看这个结论对是不对. 先从简单的redis开始. redis服务器也是运行在单线程上的.俩都是单线程,看起来更加坚定不需要连接池的结论了. 从详细的图像来看看nodejs 连接 redis用连接池有没有意义. 上图中,nodejs共有俩连接,

nodejs使用MYSQL连接池,断线重连

两种方式解决1.你可以配置mysql的连接池 var mysql = require('mysql'); var pool = mysql.createPool({ host: 'localhost', user: 'nodejs', password: 'nodejs', database: 'nodejs', port: 3306 }); var selectSQL = 'select * from t_user limit 10'; pool.getConnection(function

nodejs mysql 创建连接池

用Nodejs连接MySQL 从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎.chrome浏览器就基于V8,同时打开20-30个网页都很流畅.Nodejs标准的web开发框架Express,可以帮助我们迅速建立web站点,比起PHP的开发效率更高,而且学习曲线更低.非常适合小型网站,个性化网站,我们自己的Geek网站!! 关于作者 张丹(Conan), 程序员

Nodejs与mysql连接池的应用(pool)

/* * 连接池 连接和缓存的技术 * */ var mysql = require('mysql'); var pool = mysql.createPool({ connectionLimit:2,//连接池最多可以创建连接数 host:'', user:'root', database:'yudi', password:'', queueLimit:8 // 队伍中等待连接的最大数量,0为不限制. }); // pool.query('select * from person',funct

数据连接池使用方法 JADI

1.编写context.xml 文件复制到 WebRoot/META_INF/context.xml <?xml version='1.0' encoding='utf-8'?> <Context> <WatchedResource>WEB-INF/web.xml</WatchedResource> <Resource name="jdbc/oracle" auth="Container" type="

golang redis连接池使用方法

package main import ( "fmt" "github.com/garyburd/redigo/redis" ) var pool *redis.Pool func init() { pool = &redis.Pool{ MaxIdle: 8, MaxActive: 0, IdleTimeout: 300, Dial: func() (redis.Conn, error) { return redis.Dial("tcp"

redis mysql 连接池 之 golang 实现

分享一下 golang 实现的 redis 和 mysql 连接池,可以在项目中直接引用连接池句柄,调用对应的方法. 举个栗子: 1 mysql 连接池的使用 (1) 在项目子目录放置 mysql.go (2)在需要调用的地方导入连接池句柄 DB (3)调用 DB.Query() 2 redis 连接池的使用 (1)在项目子目录放置 redis.go (2)在需要调用的地方导入连接池句柄 Cache (3)调用 Cache.SetString ("test_key", "te

自定义连接池(装饰者模式)

连接池概述: 管理数据库的连接, 作用: 提高项目的性能. 就是在连接池初始化的时候存入一定数量的连接,用的时候通过方法获取,不用的时候归还连接即可. 所有的连接池必须实现一个接口 javax.sql.DataSource接口 获取连接方法: Connection getConnection() 归还连接的方法就是以前的释放资源的方法.调用connection.close(); 增强方法: 1.继承 2.装饰者模式(静态代理) 3.动态代理 装饰者模式: 使用步骤: 1.装饰者和被装饰者实现同一

教你正确地利用Netty建立连接池

一.问题描述 Netty是最近非常流行的高性能异步通讯框架,相对于Java原生的NIO接口,Netty封装后的异步通讯机制要简单很多. 但是小K最近发现并不是所有开发人员在使用的过程中都了解其内部实现机制,而是照着葫芦画瓢. 网上简单搜索下,在客户端使用Netty建立连接池的文章也是比较少.今天小K给大家简单介绍下使用Netty建立连接池的方法. 首先我们来看下Netty官方给出的客户端sample实例: //创建一个EventLoopGroup,可以简单认为是Netty框架下的线程池,默认最大