• node.js结合redis+mysql


    mysql大家都知道是什么,数据库,就不怎么简介了,redis当你的服务器访问量比较大的时候或者说想让你的速度访问更快的时候,你就要用到redis进行缓存,好处就是别人请求的都是你缓存的数据,你只需要定时的向mysql调用数据即可,避免了大量用户访问的时候频繁的对数据库进行select查找,减轻了服务器的压力。

    用的时候记得下载redis和redis可视化工具,启动redis server;

    redis可视化工具帮助开发,观察是否设置成功;

    redis配置:

    RDS_PORT = 6379,        //端口号
    RDS_HOST = '192.168.1.101',    //服务器IP
    RDS_OPTS = {},            //设置项
    client = redis.createClient(RDS_PORT,RDS_HOST,RDS_OPTS);
    client.on('ready',function(err){
    	if(err){
    		console.log(err)
    		client = redis.createClient(RDS_PORT,RDS_HOST,RDS_OPTS);
    	}
    	console.log('ready')
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    因虽然说redis说是会自动重连最好还是做个监控,所以你需要进行报错监控处理:

    client.on("error", function (err) {
       report('RedisError');
       logger.error("Error " + err);
    });
    
    var client = redis.createClient({
        retry_strategy: function (options) {
            if (options.error.code === 'ECONNREFUSED') {
                // End reconnecting on a specific error and flush all commands with a individual error 
                report('连接被拒绝');
            }
            if (options.times_connected > 10) {
                report('重试连接超过十次');        
            }
            // reconnect after 
            return Math.max(options.attempt * 100, 3000);
        }
    });
    function uncaughtExceptionHandler(err){
        if(err && err.code == 'ECONNREFUSED'){
            
        }else{
            process.exit(1);
        }
    }
    process.on('uncaughtException', uncaughtExceptionHandler);
    
    • 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

    具体的操作指令可参考:点击打开链接

    其实大部分就只用到了set,如:

    client.select('4',function(error){
    
    	if(error) {
    	console.log(error);
    		} else {
    		client.set(id, JSON.stringify(rows));
    			}
    })	
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    4就是redis第几个库,我记得好像一共有十几个的吧;打开可视化工具就能看到

    然后你在写api的时候就可以,去get请求了:

    client.select('4',function(error){
    		if(error){
    			console.log(error)
    		}else{
    			client.get(id,function(err,data){
    			 	res.send(JSON.parse(data))
    			})	
    		}
    	})
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    还有用的比较多的就是hset,区别就是多了一个对应的key ,以及redis设置过期时间等等我就不列举了;

    mysql:

    mysql网上的教程也有很多,我在这里重点讲一下mysql如何处理部署服务器上报错重连,以及如何减轻服务器压力的问题。

    首先要封装一个函数的形式function handleError () ,在内部链接的时候如果报错就进行重新执行该函数:

    在函数结尾再监听一下报错:

    如果跟数据库长连的话,这样一般会导致一个问题,就是你每次报错,都要去重新去连接数据库,一般时间久了,它会一直重新相当于无限的进行重新打开一个链接,这也是我之前碰到的一个坑,也是一个很重要的性能优化,把服务器负担搞得压力很大。解决办法就是;

    conn.release();

    释放;

    一般部署服务器也用到了forever,用它进行守护进程。npm i forever -g安装完毕,直接去监听www文件就可以了。

  • 相关阅读:
    贝壳网webpack案例
    ApplicationContext的实现类有哪些呢?
    栈和队列的应用 —— 链队列
    ky10 server arm 在线编译安装openssl3.1.4
    Git常见问题
    计算机网络的体系结构
    01-Redis核心数据结构与高性能原理
    python和go相互调用的两种方法
    springboot大学生拼车管理系统毕业设计源码201507
    最小二乘是什么?
  • 原文地址:https://blog.csdn.net/web18484626332/article/details/126481373