1

私はこのコードスニペットを見ています:

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 データベースはどこに保存されますか? スクリプトと同じディレクトリにありますか? どうすればそれを変更できますか?

Node.js で Redis を使用しています。

4

2 に答える 2

4

ええと、彼らはクライアントごとにredis接続を作成しているようです。これは絶対にお勧めできません。

Redisはデータベースです。MySQLのようなものです。クライアントからアクセスできますが、サーバー上で実行されているプログラムです。データはそれによって処理されるので、それがどこにあるかを心配する必要はありません。心配な場合は、redisの構成を確認できます。詳細はこちら: http: //redis.io(ドキュメントは本当に良いです)。

コードを「修正」し、1つのクライアントのみを使用するには、次のように使用する必要があります。

/**
 * 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 );
          } );
        } );
      } );
    });
};
于 2012-06-13T07:19:13.577 に答える
2

接続プーリングを実装する必要があります。そうしないと、コードがスープになります。また、django-redis-backend で redis を使用し、コード スニペットを以下に示します。それはあなたにアイデアを与えるでしょう。

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()
于 2012-06-14T01:51:30.140 に答える