我经常查询AD以获取信息(例如,获取Windows主体,安全组等),并且想知道缓存此类信息的好方法。例如:
var pc = new PrincipalContext(ContextType.Domain);
var up = UserPrincipal.FindByIdentity(pc, User.Identity.Name);
我希望完成的是FindByIdentity()
或类似的东西来决定“嘿,我最近运行此查询,让我们不再烦扰AD”并从本地缓存中获取它?
问题1: DirectoryServices或任何相关库是否提供此类机制?
问题2:其次,这些查询是针对Http请求触发的,可能是每秒几百次。如果我必须编写自己的缓存机制,正如@ HillBilly.Developer在下面建议的那样,缓存存储的优先范围是什么?
答案 0 :(得分:0)
创建一个表示要存储的数据的类,填充它,将其存储在缓存中,并过期。
未经测试!,但应该给你一个想法
public class UserData
{
public string Username {get; set;}
public string Email {get; set;}
}
然后,您需要填充它:
List<UserData> ud;
ud = (List<UserData>)Cache["UserData"];
if(ud == null)
{
ud = AD.RetrieveUsers();
Cache.Add("UserData", ud, null, DateTime.Now.AddHours(1), Cache.NoSlidingExpiration, CacheItemPriority.High, null);
}
显然,对AD.RetrieveUsers()
的调用将是您要为数据查询AD所需的任何类/函数。