Node.js 在nodejs中使用redis的最佳实践是什么?

Node.js 在nodejs中使用redis的最佳实践是什么?,node.js,redis,Node.js,Redis,我正在用nodejs、express和。我想制作一个模块来封装所有与redis相关的操作,这样我就不必到处处理redis密钥 |- app.js |- models | |- db.js <-- All redis-related operations here ..... 既然select是一个异步调用,我如何在单独的模块(db.js)中使用它 看起来像是在脚本结束之前必须调用client.quite(),否则脚本不会退出。在db.js中将client封装为db.js中的局部变

我正在用nodejs、express和。我想制作一个模块来封装所有与redis相关的操作,这样我就不必到处处理redis密钥

|- app.js
|- models
|   |- db.js   <-- All redis-related operations here
.....
既然
select
是一个异步调用,我如何在单独的模块(
db.js
)中使用它

  • 看起来像是在脚本结束之前必须调用
    client.quite()
    ,否则脚本不会退出。在
    db.js
    中将
    client
    封装为
    db.js
    中的局部变量时,如何在
    db.js
    外部执行此操作


  • 我建议用定义好的接口创建类似于服务/存储库/接口的东西,然后调用它的方法

    例如,如果您有一个用户数据库:

    var UserService=function(){
      this.client=new ...
    }
    
    UserService.prototype.getUserById=function(id, cb){
    this.client.select(...,function(result,err){
      cb(result);
    }
    }
    
    UserService.prototype.... so on
    
    现在,在您的express应用程序中,您将创建一个UserService变量并使用它。 当然,您应该创建更智能的用户服务。 在UserService中,您可以添加缓存

    var app = express();
    var userService = new UserService();
    //...
    
    最后,请阅读以下内容:

    我用这个

    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 connexion已创建

    而不是

    Redis connexion已创建

    Redis connexion已创建


    谢谢你的回答。我确实认为在每个方法中使用client
    select
    命令是一个好主意,但是直接这样做会导致每次调用方法时发出
    select
    命令。可能一些可以重用当前连接的包装器就可以了。
    import redisClient from "./lib/RedisClient"
    ...
    const client = redisClient.createClient(process.env.REDISURI)
    const clientA = redisClient.createClient(process.env.REDISURI)
    ...