当前位置: 首页 > 面试题库 >

我应该为每个连接创建一个新的Redis客户端吗?

萧繁
2023-03-14
问题内容

我正在看下面的代码片段:

var addSnippet = function( req, res ) {
  getPostParams( req, function( obj ) {
      var r = redis.createClient();

      r.stream.on( 'connect', function() {
        r.incr( 'nextid' , function( err, id ) {
          r.set( 'snippet:'+id, JSON.stringify( obj ), function() {
            var msg = 'The snippet has been saved at <a href="/'+id+'">'+req.headers.host+'/'+id+'</a>';
            res.respond( msg );
          } );
        } );
      } );
    });
};

从这里:http : //howtonode.org/node-redis-
fun

我不太了解发生了什么。从示例中,我认为Redis客户端是数据库和程序员之间的某种接口,但现在看来他们正在为每个提交的代码创建一个新客户端(他们在教程中构建的应用程序接受代码段)提交并将其存储在数据库中)!

另外,Redis数据库存储在哪里?与脚本位于同一目录中吗?我该如何改变?

我正在将Redis与Node.js一起使用。


问题答案:

嗯,看起来他们正在为每个客户端创建一个Redis连接。绝对不建议这样做。

Redis是一个数据库。就像MySQL。您可以通过客户端访问它,但是它是服务器上运行的程序。数据由它处理,因此您不必担心它在哪里。如果您确实担心,可以查看redis配置。更多信息,请访问: http
//redis.io(该文档非常好)。

要“修复”代码并仅使用一个客户端,您必须像这样使用它:

/**
 * Move this at the top, this way it's not run once per client,
 * it is run once the node program is launched.
 */
var r = redis.createClient();

var addSnippet = function( req, res ) {
  getPostParams( req, function( obj ) {    
      r.stream.on( 'connect', function() {
        r.incr( 'nextid' , function( err, id ) {
          r.set( 'snippet:'+id, JSON.stringify( obj ), function() {
            var msg = 'The snippet has been saved at <a href="/'+id+'">'+req.headers.host+'/'+id+'</a>';
            res.respond( msg );
          } );
        } );
      } );
    });
};


 类似资料:
  • 问题内容: 我只是想知道:在Java应用程序中,每次需要连接到FTP服务器时,我应该创建一个新的FTPClient对象,还是应该创建一个FTPClient()对象,并在每次连接至一个FTP服务器? 问题答案: 重用会更好,因为每次创建新连接甚至与新服务器时都不需要新实例。因为连接和断开连接方法可以为您完成这项工作。 因此,请尽可能多地重用对象。

  • 我正在尝试从另一台机器创建与基于java的套接字服务器的多个客户端连接。服务器和客户端都使用Netty 4进行NIO。在服务器端,我使用了boss和Worker group,它能够在单个linux盒上接收和服务器100000并发连接(在设置内核参数和ulimited之后)。 但是,我最终在客户端为每个连接创建了一个新线程,这导致了JVM线程限制异常。 有人能告诉我,我如何使用Netty从客户端创建

  • 我们在应用程序中使用redis进行缓存。 我们的目标是在池大小耗尽或超过某个阈值时创建新的Redis连接,以便将空闲连接的数量保持在最小。通过这种方式,redis服务器资源被分配给真正需要它的应用服务器。 在我们的java应用程序中,我们使用的是spring的JedisConnectionFactory of spring数据redis 1.4.2,它在内部使用了Jedis 2.6.2和commo

  • 我正在尝试连接到MBean服务器。我需要编写JMX客户端应用程序。这是用于客户端应用程序的代码。但我有一个例外 检索RMIServer存根失败:javax.naming.ServiceUnavailableException[根异常为java.rmi.ConnectException:连接拒绝主机:localhost;嵌套异常为: 谁能帮我把这个修好。 我使用以下参数运行了这段代码。 dcom.s

  • 问题内容: 我有一个可以为其创建一个(或多个)实例的实例。我正在使用Servlet环境,并且已经将一个EntityManagerFactory连接到Servlet(通过Servlet上下文),该Servlet在Servlet的生命周期中(因此,对于所有用户)都共享。 我可以执行以下操作之一: 在我的Servlet的生存期内创建一个EntityManager(例如,在所有用户之间共享) 为每个用户创

  • 我和dagger2合作有一段时间了。而且我也搞不清楚要不要为每个activity/片段创建一个自己的组件/模块。请帮我澄清一下: 比如我们有一个app,这个app大概有50个屏幕。我们将按照MVP模式和Dagger2为DI实现代码。假设我们有50个活动和50个主持人。 在我看来,通常我们应该这样组织代码: > 创建AppComponent和AppModule,它们将提供应用程序打开时使用的所有对象