2

我经常向 AD 查询信息(例如获取 Windows 主体、安全组等),并且想知道缓存此类信息的好方法。例如:

var pc = new PrincipalContext(ContextType.Domain);
var up = UserPrincipal.FindByIdentity(pc, User.Identity.Name);

我希望完成的是FindByIdentity()或类似的事情来决定“嘿,我最近运行了这个查询,我们不要再打扰 AD 了”并从本地缓存中获取它?

问题 1: DirectoryServices 或任何相关库是否提供此类机制?

问题 2:其次,这些查询是在 Http 请求上触发的,每秒可能有数百个。如果我必须编写自己的缓存机制,正如@HillBilly.Developer 下面建议的那样,缓存存储的首选范围是什么?

4

1 回答 1

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 查询数据的任何类/函数。

于 2012-08-17T01:11:45.907 回答