我正在尝试将StackExchange.Redis客户端集成到我的解决方案中以进行请求记录。
高可用性至关重要,因此日志记录组件必须能够承受网络故障和潜在的redis集群中断。精度不是必不可少的,所以我正在使用" Fire&忘记"模式。
为了测试网络中断情况,我使用以下代码创建了一个测试Web应用程序:
namespace WebApplication1
{
public static class Logger
{
private static readonly IDatabase _db;
static Logger()
{
var configurationOptions = new ConfigurationOptions();
configurationOptions.AbortOnConnectFail = false;
configurationOptions.ConnectRetry = 1;
configurationOptions.ConnectTimeout = 100;
configurationOptions.EndPoints.Add("test.example.com", 6379);
var redis = ConnectionMultiplexer.Connect(configurationOptions);
_db = redis.GetDatabase();
}
public static void Push()
{
_db.ListRightPush("key", "value", When.Always, CommandFlags.FireAndForget);
}
}
public partial class _Default : Page
{
protected void Page_Load(object sender, EventArgs e)
{
Logger.Push();
}
}
}
...使用Apache Bench以50k请求命中它。 在达到1.1GB的工作集后,本地IIS崩溃了。
这完全不是我所期望的,因为它被配置为仅重试一次并在100ms后超时。
我是否错误配置了它?