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