我正试图使用他们的caching方法将缓存添加到我们的IS4实现中。然而,我的实现似乎不会对登录速度或每次登录时访问数据库的查询数量产生任何影响(我希望缓存可以减少这两者(。
我为实现缓存所做的更改如下:
将以下内容添加到Startup.cs ConfigureServices
更新了服务。AddIdentiyServer((调用以包含以下行:
.AddInMemoryCaching()
.AddClientStoreCache<IClientStore>()
.AddResourceStoreCache<IResourceStore>()
.AddCorsPolicyCache<ICorsPolicyService>();
更新了ConfigureServices,使其也具有以下功能:
services.AddScoped<ICorsPolicyService, DefaultCorsPolicyService>();
services.AddScoped<IClientStore, ClientStore>();
services.AddScoped<IResourceStore, ResourceStore>();
这似乎是我唯一需要实现的东西,虽然应用程序正常运行,但缓存似乎没有任何作用。我错过了什么?
基本上你需要做两件事:
首先实现IClientStore
:
public class ClientStore : IClientStore
{
private readonly IClientService clientService;
public ClientStore(IClientService clientService)
{
this.clientService = clientService;
}
public Task<Client> FindClientByIdAsync(string clientId)
{
var client = this.clientService.GetById(clientId);
return Task.FromResult(client);
}
}
ClientService
是我从数据库获取客户端的实现,因此您需要在那里放置自己的。
然后在Startup.cs
中,您需要:
services.AddIdentityServer(options =>
{
options.Caching.ClientStoreExpiration = new TimeSpan(0, 5, 0);
})
.AddInMemoryCaching()
.AddClientStoreCache<ClientStore>()
.// More stuff that you need
这是针对Client Caching
,但针对Cors
和ResourceStore
是完全相同的。
我认为你错过了options.Caching.ClientStoreExpiration
部分。从那里开始。
希望这能有所帮助。
PS:忘了提一下,您不需要显式地注入IClientStore
的实现。通过将其添加到.AddClientStoreCache<ClientStore>()
,它被注入。但是(在我的例子中(如果你有其他服务,商店使用,你需要注入它们。
没有标准的缓存用户的方法。
它只缓存:
- 客户端-AddClientStoreCache
- 资源-AddResourceStoreCache
- CorsPolicy-添加CorsPolicyCache
您可以从文档中获得更多详细信息