在最后几天,我正在尝试优化我的网站,因为当我有连接峰值时,由于redis缓存所带来的低性能。
我使用的是redis版本 1.2.6 ,我在连接字符串中设置了 abortConnect = false 。
这里我如何获得与redis的连接:
private static readonly Lazy<ConnectionMultiplexer> LazyConnection
= new Lazy<ConnectionMultiplexer>(() =>
ConnectionMultiplexer.Connect(GetRedisConnectionString()));
private static readonly Lazy<ConnectionMultiplexer> LazyConnection
= new Lazy<ConnectionMultiplexer>(() =>
{
var connection = ConnectionMultiplexer.Connect(GetRedisConnectionString());
connection.PreserveAsyncOrder = false;
//connection.TimeoutMilliseconds
return connection;
});
在global.asax中我按照本文http://stackexchange.github.io/StackExchange.Redis/Timeouts
的建议改变了最小线程数 int workerThreads = 500;
int iocpThreads = 500;
System.Threading.ThreadPool.SetMinThreads(workerThreads, iocpThreads)
但是我们在日志中仍有一些像这样的错误:
Timeout performing GET campaign_url_728566_288, inst: 19, mgr: Inactive,
err: never, queue: 7, qu: 0, qs: 7, qc: 0, wr: 0, wq: 0, in: 0, ar: 0,
clientName: RD00155D881345, serverEndpoint:
Unspecified/**********************, keyHashSlot: 6859, IOCP:
(Busy=0,Free=1000,Min=500,Max=1000), WORKER:
(Busy=25,Free=8166,Min=500,Max=8191)
或
Timeout performing GET campaign_url_728566_288, inst: 7, mgr: Inactive, err:
never, queue: 24, qu: 0, qs: 24, qc: 0, wr: 0, wq: 0, in: 4488, ar: 0,
clientName: RD00155D881345, serverEndpoint: Unspecified**********,
keyHashSlot: 6859, IOCP: (Busy=0,Free=1000,Min=500,Max=1000), WORKER:
(Busy=40,Free=8151,Min=500,Max=8191)
现在我注意到在门户中创建和显示的最大连接数最多为20,当我期望在高音量时有超过它们。
是否有任何设置可以增加ConnectionMultiplexer的连接数量?或者问题与缓存的大小(目前是C1标准)还是由于有限的带宽有关?
答案 0 :(得分:2)
此类问题可能是由服务器端或客户端问题引起的。您是否查看了https://gist.github.com/JonCole/db0e90bedeb3fc4823c2#file-diagnoserediserrors-clientside-md和https://gist.github.com/JonCole/9225f783a40564c9879d#file-diagnoserediserrors-serverside-md?
如果您通过azurecache@microsoft.com向我们发送以下信息(https://gist.github.com/JonCole/132b255425268459ec95#file-supportquestionnaire-md),我们也可以调查服务器上是否存在任何瓶颈以及我们可能提出的建议。