• mysql连接池模块


    如果不想程序在查询数据时卡死或等待过长时间,一般不推荐在node中开启一个连接后全部查询都用这个链接并且不关闭。因为node里面的mysql不像php里的那样会在完成查询后断开,只要不主动断开,连接一直存在,当连接数量达到一定数量时就会产生严重的阻塞,出现各种延时和卡死现象。在并发量较大时,可以通过建立连接池来缓解并发压力。

    在node中的mysql模块里其用来操作数据的query()方法接收的参数是不同的,在使用时需要特别注意。具体模块如下:

    /**
     * mysql连接池模块
     * @author jeri
     * @time  2016.5.24           
     */
    
    var mysql=require("mysql");
    /**
     * 连接池建立
     * @pool {object}
     */
    var pool = mysql.createPool({  
        host: 'localhost',  
        user: 'root',  
        password: '',  
        database: 'movielens',  
        port: 3306  
    });  
    
    /**
     * select和delete操作
     * @param  {string}   sql      sql语句
     * @param  {Function} callback 回调函数
     * @return {none}            
     */
    var sdQuery=function(sql,callback){  
        pool.getConnection(function(err,conn){  
            if(err){ 
    
                console.log('CONNECT ERROR:', err.message); 
                callback(err,null,null);  
            }else{  
                conn.query(sql,function(qerr,vals,fields){  
                    //释放连接  
                    conn.release();  
                    //事件驱动回调  
                    callback(qerr,vals,fields);  
                });  
            }  
        });  
    };  
    
    /**
     * update和insert操作
     * @param  {string}   sql      sql语句
     * @param  {array}    params   参数数组 
     * @param  {Function} callback 回调函数
     * @return {none}            
     */
    var uiQuery=function(sql,params,callback){  
        pool.getConnection(function(err,conn){  
            if(err){ 
                
                console.log('CONNECT ERROR:', err.message); 
                callback(err,null,null);  
            }else{  
                conn.query(sql,params,function(qerr,vals,fields){  
                    //释放连接  
                    conn.release();  
                    //事件驱动回调  
                    callback(qerr,vals,fields);  
                });  
            }  
        });  
    };  
    
    /**
     * query函数重载
     * @return {none}
     */
    var query = function(){
    
        var len = arguments.length;
        if(len==2) {
            var sql = arguments[0];
            var cb = arguments[1];
            sdQuery(sql, cb);
        } else if(len == 3){
            var sql = arguments[0];
            var params = arguments[1];
            var cb = arguments[2];
            uiQuery(sql, params, cb);
    
        } else {
            console.log('ERROR:', '传参不对');
        }
    };
    
    // 暴露接口
    module.exports = query;
  • 相关阅读:
    Python基础第三天——变量、列表、元组、字典
    Django学习第二天
    开篇:鸡汤
    Python常用的字符串方法总结
    Django学习第一天
    Python基础第二天——if判断、while循环、for循环、Pycharm的使用、python字符串
    Python基础第一天——编程的概念、python的介绍与安装、python的变量、python的运算符
    计算机英语单词记录
    亿图画流程图的小技巧——自定义模板
    sysbench介绍
  • 原文地址:https://www.cnblogs.com/syfwhu/p/5522803.html
Copyright © 2020-2023  润新知