这是重用redis客户端的正确方法吗?

Posted

技术标签:

【中文标题】这是重用redis客户端的正确方法吗?【英文标题】:Is this the correct way to reuse the redis client? 【发布时间】:2013-10-19 04:01:11 【问题描述】:

我创建了一个名为redisConnection.js 的redis 客户端模块。其内容如下

var redis = require('redis').createClient();

exports.exposeConnection = function()

 return redis;

; 

现在,每当我想使用 redis 时,我只需 require 模块并调用 exposeConnection 方法。我想知道这是否是重用连接的正确方法。我希望redis连接只被实例化一次,而不是每次我调用模块时。如果没有,有没有更好的方法重用它?

【问题讨论】:

真的不能说是不是“正确。”但是,Node 基于on their file path 执行cache modules。因此,只要您没有多个redisConnection.js 文件,就应该在所有require()s 中创建一个连接。 @JonathanLonowski 谢谢。模块缓存是我一直在寻找的。你能补充一个答案吗? 我知道这不是您问题的答案,但它可能是通过执行以下操作实现该客户端在整个应用程序中可访问的一种方法 - var redis = require('redis'); GLOBAL._REDISCLIENT = redis.createClient(port, server); @Pranav 感谢您指出这一点。我不知道你可以在节点 js 中创建 GLOBAL 变量。 【参考方案1】:

这几乎与我将要做的事情(以及我在以前的应用程序中所做的事情)相似。

虽然我不会通过函数公开它:

module.exports = require('redis').createClient();

所以稍后我可以只使用redis = require('./local-redis') 而不是redis = require('./local-redis').exposeConnection()

这是一个非常简单但可靠的架构。

【讨论】:

谢谢你的回答:)我几乎放弃了这个问题。 如果您使用WATCHEXECMULTI 等事务命令,请小心使用单个连接。如果同时使用单个连接,您的代码可能不正确。您将需要单独的连接以确保正确性。

以上是关于这是重用redis客户端的正确方法吗?的主要内容,如果未能解决你的问题,请参考以下文章

固定数量客户端的 Redis 事务

AWS Dynamodb,排序键

带有移动客户端的 websocket

将文件从 REST Web 服务发送到客户端的正确方法是啥?

使用 WinSock 客户端/服务器应用程序重用套接字

公共第一方客户端的正确 OAuth2 流程