Как часто мне следует открывать / закрывать соединение с Книжным рукавом?
Я использую библиотеку Booksleeve в приложении C#/ASP.NET 4. В настоящее время объект RedisConnection является статическим объектом в моем классе MonoLink. Должен ли я держать это соединение открытым, или я должен открывать / закрывать его после каждого запроса / транзакции (как я делаю сейчас)? Просто немного смущен. Вот как я использую это, на данный момент:
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;
}
Заранее спасибо за любые ответы / понимание. Кроме того, есть ли какая-либо официальная документация для этой библиотеки? Спасибо, ТАК ^_^.
3 ответа
Должен ли я держать это соединение открытым, или я должен открывать / закрывать его после каждого запроса / транзакции (как я делаю сейчас)?
Вероятно, есть небольшие издержки, если вы будете открывать новое соединение каждый раз, когда захотите выполнить запрос / транзакцию, и хотя redis предназначен для высокого уровня одновременно подключенных клиентов, могут возникнуть проблемы с производительностью, если их число составляет около десятков тысяч. Насколько я знаю, пул соединений должен выполняться клиентскими библиотеками (потому что сам redis не имеет этой функциональности), поэтому вам следует проверить, поддерживает ли книжная оболочка этот материал. В противном случае вы должны открыть соединение при запуске приложения и оставить его открытым в течение всего срока службы (в случае, если вам по каким-либо причинам не нужны параллельные клиенты, подключенные к redis).
Кроме того, есть ли какая-либо официальная документация для этой библиотеки?
Единственная документация, которую я смог найти относительно того, как использовать это, была папка тестов в ее исходных кодах.
Соединение является потокобезопасным и предназначено для массового совместного использования; не делайте соединение за операцию.
Для справки (продолжение ответа @bzlm) я создал Singleton, который всегда предоставляет одно и то же соединение Redis с использованием BookSleeve (если оно закрыто, оно создается. Иначе, существующее соединение обслуживается).
Посмотрите на это: /questions/22174282/podderzhanie-otkryitogo-soedineniya-redis-s-pomoschyu-booksleeve/22174290#22174290
Вы потребляете это так:
RedisConnection connection = Redis.RedisConnectionGateway.Current.GetConnection();