asp.net - route - ¿Con qué frecuencia debo abrir/cerrar mi conexión de Booksleeve?
form in asp net core (3)
¿Debo mantener esta conexión abierta, o debo abrirla / cerrarla después de cada consulta / transacción (como lo estoy haciendo ahora)?
Probablemente exista una pequeña sobrecarga si abre una nueva conexión cada vez que quiera realizar una consulta / transacción y, aunque redis está diseñado para un alto nivel de clientes conectados simultáneamente, puede haber problemas de rendimiento si su número es de decenas de miles. Por lo que sé, la agrupación de conexiones debe ser realizada por las bibliotecas cliente (porque redis en sí no tiene esta funcionalidad), por lo que debe verificar si Booksleeve es supports estas cosas. De lo contrario, debería abrir la conexión cuando se inicie la aplicación y mantenerla abierta durante toda su vida útil (en caso de que no necesite que los clientes paralelos estén conectados a redis por alguna razón).
Además, ¿hay algún tipo de documentación oficial para esta biblioteca?
La única documentación que pude encontrar sobre cómo usarla fue la carpeta de pruebas en sus códigos fuente.
Estoy usando la biblioteca de 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)? Sólo un poco confundido. Así es como lo estoy usando, a partir de ahora:
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 / visión. Además, ¿hay algún tipo de documentación oficial para esta biblioteca? Gracias SO ^ _ ^.
Para referencia (continuando con la respuesta de @ bzlm ), creé un Singleton que siempre proporciona la misma conexión Redis usando BookSleeve (si está cerrado, se está creando. De lo contrario, se está sirviendo la conexión existente).
Mira esto: https://.com/a/8777999/290343
Lo consumes así:
RedisConnection connection = Redis.RedisConnectionGateway.Current.GetConnection();
Según el autor de Booksleeve ,
La conexión es segura para subprocesos y está destinada a compartirse masivamente; No hagas una conexión por operación.