node的events模块只提供了一个EventEmitter对象,它代理的全部的事件注册、监听、删除、触发的方法。
var events = new require('events')
var event = new events.EventEmitter()
event.on('connect',function(cd) {
console.log(cd)
})
event.emit('connect')
所谓雪崩问题就是在高访问量,大并发的情况下,缓存失效,大量的查询请求涌入数据库,如果访问量巨大,同一条sql会被反复查询,造成查询缓慢,进而影响整个网站的响应速度。
我们可以通过evnet的once事件来解决雪崩问题
var events = new require('events')
var event = new events.EventEmitter()
var ready = 'ready'
async function select(callback) {
event.once('select',callback)
if (ready === 'ready'){
ready = 'pending'
var result = await db.select(sql)
event.emit('select',result)
ready = 'ready'
}
}