2011-09-25 15 views
15

Estoy usando la biblioteca Booksleeve en una aplicación C#/ASP.NET 4. Actualmente, el objeto RedisConnection es un objeto estático en mi clase MonoLink. ¿Debo mantener esta conexión abierta, o debo abrirla/cerrarla después de cada consulta/transacción (como lo estoy haciendo ahora)? Un poco confundido Así es como lo estoy usando, a partir de ahora:¿Con qué frecuencia debo abrir/cerrar mi conexión de Booksleeve?

public static MonoLink CreateMonolink(string URL) 
{ 
    redis.Open(); 
    var transaction = redis.CreateTransaction(); 

    string Key = null; 

    try 
    { 
     var IncrementTask = transaction.Strings.Increment(0, "nextmonolink"); 
     if (!IncrementTask.Wait(5000)) 
     { 
      transaction.Discard(); 
      throw new System.TimeoutException("Monolink index increment timed out."); 
     } 

     // Increment complete 
     Key = string.Format("monolink:{0}", IncrementTask.Result); 

     var AddLinkTask = transaction.Strings.Set(0, Key, URL); 
     if (!AddLinkTask.Wait(5000)) 
     { 
      transaction.Discard(); 
      throw new System.TimeoutException("Add monolink creation timed out."); 
     } 

     // Run the transaction 
     var ExecTransaction = transaction.Execute(); 
     if (!ExecTransaction.Wait(5000)) 
     { 
      throw new System.TimeoutException("Add monolink transaction timed out."); 
     } 
    } 
    catch (Exception ex) 
    { 
     transaction.Discard(); 
     throw ex; 
    } 
    finally 
    { 
     redis.Close(false); 
    } 

    // Link has been added to redis 
    MonoLink ml = new MonoLink(); 
    ml.Key = Key; 
    ml.URL = URL; 

    return ml; 
} 

Gracias, de antemano, por cualquier respuesta/idea. Además, ¿hay algún tipo de documentación oficial para esta biblioteca? Gracias S.O.^_ ^.

Respuesta

8

¿Debo mantener esta conexión abierta, o debo abrir/cerrar después de cada consulta/transacción (como lo estoy haciendo ahora)?

Probablemente hay una pequeña sobrecarga si va a abrir una nueva conexión cada vez que desea hacer una consulta/transacción y aunque Redis está diseñado para alto nivel de clientes conectados simultáneamente, puede haber problemas de rendimiento si su número está alrededor de decenas de miles. Por lo que sé, la agrupación de conexiones debería ser realizada por las bibliotecas del cliente (porque el redis en sí mismo no tiene esta funcionalidad), por lo que debería comprobar si el paquete de archivos contiene supports. De lo contrario, debe abrir la conexión cuando se inicia la aplicación y mantenerla abierta durante toda la vida (en caso de que no necesite clientes paralelos conectados a redis por algún motivo).

Además, ¿hay algún tipo de documentación oficial para esta biblioteca?

La única documentación que pude encontrar con respecto a cómo usarla fue tests folder en sus códigos fuente.

4

Como referencia (continuando @bzlm's answer), he creado un Singleton, que siempre ofrece la misma conexión Redis usando BookSleeve (si está cerrado, está siendo creado. Si no, se está sirviendo la conexión existente).

vistazo a esto: https://stackoverflow.com/a/8777999/290343

se consumen así:

RedisConnection connection = Redis.RedisConnectionGateway.Current.GetConnection(); 
Cuestiones relacionadas