我们将应用程序部署到Azure。它正在使用Azure Redis缓存,并且我们遇到了很多超时。即:
[TimeoutException: Timeout performing GET textobjectDetails__23290_TextObject, inst: 1, mgr: Inactive, queue: 5, qu=0, qs=5, qc=0, wr=0/0, in=56864/0]
[TimeoutException: Timeout performing GET featured_series_CachedSeries, inst: 1, mgr: Inactive, queue: 4, qu=0, qs=4, qc=0, wr=0/0, in=44470/0]
[TimeoutException: Timeout performing GET SeriesByFranchiseId_1_CachedSeries, inst: 1, mgr: Inactive, queue: 3, qu=0, qs=3, qc=0, wr=0/0, in=11252/0]
[TimeoutException: Timeout performing GET media_silo-1-1-0_Media, inst: 1, mgr: Inactive, queue: 3, qu=0, qs=3, qc=0, wr=0/0, in=15188/0]
[TimeoutException: Timeout performing GET textobjectDetails__3092_TextObject, inst: 3, mgr: Inactive, queue: 7, qu=0, qs=7, qc=0, …
Run Code Online (Sandbox Code Playgroud) 密钥:名字 值:samurai 有效期:6 小时
public static bool Add<T>(this IDatabase cache, string key, T value, TimeSpan? expiry = null)
{
dynamic response;
response = cache.StringSet(key, JsonConvert.SerializeObject(value, jsonSettings), expiry, flags: CommandFlags.DemandMaster);
}
return response;
}
Run Code Online (Sandbox Code Playgroud)
假设此时 TTL 为 10 分钟。IE。已过去 5 小时 50 分钟,10 分钟后密钥将被删除。但是如果有人对这个key进行get操作。到期时间应再次重置为 6 小时。
一种简单的方法是再次执行cache.StringSet。但恐怕这可能会降低重负载测试下的性能。还有其他选择吗?
Azure Redis 是否支持通过 http 传输。我知道允许我选择是否启用 SSL 的设置。但在我看来,与 Azure Redis 的连接是通过 TCP 进行的。
“每个 Redis 集群节点都需要打开两个 TCP 连接。用于为客户端提供服务的普通 Redis TCP 端口,例如 6379,加上通过在数据端口上添加 10000 获得的端口,因此示例中为 16379。”
我也在微软论坛上发布了这个问题。在这里能找到它。