我在C#/ ASP.NET 4应用程序中使用Booksleeve库。目前,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;
}
提前感谢任何回复/见解。此外,这个库有哪些官方文档?谢谢你这么。 ^ _ ^。
答案 0 :(得分:25)
According to author of Booksleeve,
该连接是线程安全的,旨在大规模共享; 每次操作都不要连接。
答案 1 :(得分:8)
我应该保持这种联系开放,还是应该打开/关闭 在每次查询/交易之后(正如我现在所做的那样)?
如果每次要进行查询/事务时都打开一个新连接,可能会有一点开销,虽然redis是为高级别并发连接的客户端设计的,但如果它们的数量大约是十几个,可能会出现性能问题成千上万。据我所知,连接池应该由客户端库完成(因为redis本身没有这个功能),所以你应该检查booksleeve supports这个东西。否则,您应该在应用程序启动时打开连接,并在其生命周期内保持打开状态(如果由于某种原因您不需要并行客户端连接到redis)。
此外,该库有哪些官方文档?
我能找到的关于如何使用它的唯一文档是tests folder的源代码。
答案 2 :(得分:4)
作为参考(继续@bzlm's answer),我创建了一个Singleton,它始终使用BookSleeve提供相同的Redis连接(如果它已关闭,则正在创建。否则,正在提供现有连接)。
看看这个:https://stackoverflow.com/a/8777999/290343
你就这样消费它:
RedisConnection connection = Redis.RedisConnectionGateway.Current.GetConnection();