복붙노트

[REDIS] 나는 각 연결에 대한 새로운 레디 스 클라이언트를 생성해야 하는가?

REDIS

나는 각 연결에 대한 새로운 레디 스 클라이언트를 생성해야 하는가?

나는이 코드 찾고 있어요 :

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.

나는 아주에 무슨 일이 일어나고 있는지 이해가 안 돼요. 예에서, 나는 레디 스 클라이언트는 데이터베이스와 프로그래머 사이의 인터페이스의 일종이지만, 지금은 그들이 튜토리얼에서 구축하고 응용 프로그램이 (제출 각 코드에 대한 새로운 클라이언트를 만들 것으로 보인다 생각은 코드를 받아 데이터베이스에 제출하고 저장합니다)!

또한, 여기서 레디 스의 데이터베이스가 저장됩니다? 스크립트와 같은 디렉토리에? 나는 어떻게 변경하려면?

나는 Node.js.와 레디 스를 사용하고 있습니다

해결법

  1. ==============================

    1.어, 그들은 각각의 클라이언트에 대한 레디 스 연결을 만드는 것 같습니다. 이것은 확실히 권장되지 않습니다.

    어, 그들은 각각의 클라이언트에 대한 레디 스 연결을 만드는 것 같습니다. 이것은 확실히 권장되지 않습니다.

    레디 스 데이터베이스입니다. 그것은 MySQL을 같아요. 당신은 클라이언트를 통해 액세스 할 수 있지만 서버에서 실행되는 프로그램입니다. 당신이 어디 있는지에 대해 걱정할 필요가 없습니다 있도록 datas, 그것은에 의해 처리됩니다. 당신이 걱정을 할 경우, 당신은 레디 스 구성을 볼 수 있습니다. 자세한 내용은 여기 : 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 );
              } );
            } );
          } );
        });
    };
    
  2. ==============================

    2.연결 풀링 그렇지 않으면 코드가 수프로 실행됩니다 구현 될 필요가 있습니다. 코드 조각이 아래에 언급과 또한, 장고 - 레디 스 - 백엔드와 레디 스를 사용합니다. 그것은 당신에게 아이디어를 줄 것이다.

    연결 풀링 그렇지 않으면 코드가 수프로 실행됩니다 구현 될 필요가 있습니다. 코드 조각이 아래에 언급과 또한, 장고 - 레디 스 - 백엔드와 레디 스를 사용합니다. 그것은 당신에게 아이디어를 줄 것이다.

    class CacheConnectionPool(object):
    
        def __init__(self):
            self._connection_pools = {}
    
        def get_connection_pool(self, host='127.0.0.1', port=6379, db=1,
                                password=None, parser_class=None,
                                unix_socket_path=None):
            connection_identifier = (host, port, db, parser_class, unix_socket_path)
            if not self._connection_pools.get(connection_identifier):
                connection_class = (
                    unix_socket_path and UnixDomainSocketConnection or Connection
                    )
                kwargs = {
                    'db': db,
                    'password': password,
                    'connection_class': connection_class,
                    'parser_class': parser_class,
                }
                if unix_socket_path is None:
                    kwargs.update({
                        'host': host,
                        'port': port,
                    })
                else:
                    kwargs['path'] = unix_socket_path
                self._connection_pools[connection_identifier] = redis.ConnectionPool(**kwargs)
            return self._connection_pools[connection_identifier]
    
    pool = CacheConnectionPool()
    
  3. from https://stackoverflow.com/questions/11009880/should-i-create-a-new-redis-client-for-each-connection by cc-by-sa and MIT license