我正在使用nodejs,express和node_redis构建应用。我想创建一个模块来封装所有与redis相关的操作,这样我就不必在任何地方处理redis密钥了。
|- app.js
|- models
| |- db.js <-- All redis-related operations here
.....
然后我在这里遇到两个问题。
我想创建redis连接并选择一个数据库:
var redis = require('redis');
var client = redis.createClient();
client.select(config.database, function() {
// actual db code
});
由于select
是异步调用,我如何在单独的模块中使用它(db.js
)?
在脚本结束之前必须调用client.quite()
,否则脚本将不会退出。如果在db.js
中将client
封装为本地变量,我该如何在db.js
之外执行此操作?
答案 0 :(得分:4)
我建议使用定义的接口创建类似服务/存储库/接口的东西,然后调用它的方法。
例如,如果您有用户db:
var UserService=function(){
this.client=new ...
}
UserService.prototype.getUserById=function(id, cb){
this.client.select(...,function(result,err){
cb(result);
}
}
UserService.prototype.... so on
现在,在您的快速应用程序中,您将创建一个UserService var并使用它。 当然,您应该更智能地创建UserService。 在UserService中,您可以添加缓存。
var app = express();
var userService = new UserService();
//...
关闭阅读:Do I need to quit
答案 1 :(得分:0)
我用这个
lib / redisClient.js
import redis from "redis";
let _redisClient;
const redisClient = {
createClient(uri) {
if (!_redisClient){
console.log('Redis conexion created')
_redisClient = redis.createClient(uri);
}
return _redisClient;
},
close(): void {
_redisClient.close();
}
};
export default redisClient;
index.js
import redisClient from "./lib/RedisClient"
...
const client = redisClient.createClient(process.env.REDISURI)
const clientA = redisClient.createClient(process.env.REDISURI)
...
这只会产生一个连接,所以您只会得到:
Redis连接已创建
代替
Redis连接已创建
Redis连接已创建