1
我嘗試緩存我的用戶列表,以便當200個用戶在線時,每10秒不會有200個數據庫查詢。這是正確的緩存嗎?
我有這樣的代碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Business
{
public class UserList
{
private static object locker = new object();
public static List<DAL.OnlineList> userList;
public static DateTime date;
}
}
-
public static string GetOnlineList(HttpContext con)
{
List<DAL.OnlineList> onlineList = new List<DAL.OnlineList>();
if (Business.UserList.date == DateTime.MinValue || Business.UserList.date < DateTime.Now.AddSeconds(-30))
{
Business.UserList.date = DateTime.Now;
onlineList = DAL.UserDAL.GetAllOnlineUser().OrderBy(x => x.Username).ToList();
Business.UserList.userList = onlineList;
}
else
{
onlineList = Business.UserList.userList;
}
//Before
//List<DAL.OnlineList> onlineList = DAL.UserDAL.GetAllOnlineUser().OrderBy(x => x.Username).ToList();
}
方法GetOnlineList每10秒鐘從一個WebMethod/PageMethod的/ JavaScript的呼叫調用。 因此,它之前是:200用戶,每10秒= 200 x 10 x 6 = 12000 db-querys每分鐘。
然後我的代碼是正確的,第一個用戶將從數據庫中加載列表並存儲它 - 並且它將每隔30秒刷新一次 - 正確嗎?
絕對到期+1。 if(Cache [「UserList」]!= null)// USE CACHE else // DATABASE CALL'或者,你可以在global.asax中放一個循環來每30秒更新一次緩存,那麼用戶永遠不必等待爲數據庫更新...它將始終是最新的,而不依賴於更新緩存的請求。 – Zerkey