- 上一篇提到.NetCore用Redis來實作Session,在單機正常拜訪下沒遇到甚麼大問題,今天在做高併發壓測的時候,發生蠻高頻率會有Redis Connection TimeOut情況發生,網路上找了一下原因,原來解答就在官網裡面有提到,關於Session高併發實作部分,官網建議在WebApi收到Request時先確保讀取到Session的資料,Response時也確認有把Session的值同步,實際做法類似這樣
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22[Route("api/[controller]")]
public class ValuesController : Controller
{
private readonly ILogger logger;
public ValuesController(ILogger<ValuesController> logger)
{
this.logger = logger;
}
[HttpGet]
public async Task<string> Get()
{
//// 確認Session可以取得資料
await HttpContext.Session.LoadAsync();
HttpContext.Session.SetString("Key", "Value:123");
//// 同步Session資料
await HttpContext.Session.CommitAsync();
return HttpContext.Session.GetString("Key");
}
}