我在Windows 2008计算机上运行了一台Redis服务器。我有多个网站,每个网站都使用BasicRedisClientManager.
此实例在应用启动时设置一次并设置到Application[]
商店。这样它可以在所有用户中重复使用。我遇到的问题是一个站点在专用服务器上运行,其他站点在运行Redis服务器的localhost上运行。一个是生产,另一个是新工作/示范的测试地点。远程客户端工作正常,但localhost客户端不会与服务器通信,似乎处于锁定/死状态。当我运行网站时,我只是堆栈溢出,网站自行回收。下面是我的设置的一些示例代码。我看到有一些关于在客户端之间创建锁的信息,但我不确定这是否是我需要采取的路线。
http://www.servicestack.net/docs/redis-client/distributed-locking-with-redis
示例代码:
protected override void Application_Start(object sender, EventArgs e)
{
/*
* Create basicRedisClientManager for redis.
*/
var redisHost = ConfigurationManager.AppSettings["RedisHostIp"].ToString();
BasicRedisClientManager basicRedisClientManager = new BasicRedisClientManager(redisHost);
Application["BasicRedisClientManager"] = basicRedisClientManager;
.....
}
然后它在类构造函数中使用
public CacheManager()
{
if (Application["BasicRedisClientManager"] != null)
{
/*local variable*/
basicRedisClientManager = (BasicRedisClientManager)Application["BasicRedisClientManager"];
}
}
在课堂上使用经理。
if (basicRedisClientManager != null)
{
using (var redisClient = (RedisClient)basicRedisClientManager.GetClient())
{
if (!saveToInProcOnly && redisClient != null)
{
using (var redis = redisClient.GetTypedClient<T>())
{
redis.SetEntry(key, value);
}
}
}
}
所有网站的逻辑都相同。
非常感谢任何见解!
答案 0 :(得分:1)
我不知道BasicRedisClientManager
但我建议您使用BookSleeve客户端库。关于连接重用,答案是不重用。也就是说,每次需要时都重新创建连接,正如BookSleeve的作者推荐的那样。
请参阅this question和accepted answer,了解如何创建防弹Redis客户端连接。