gpt4 book ai didi

aspnetboilerplate - 如何在 ASP.NET Boilerplate 中使用缓存?

转载 作者:行者123 更新时间:2023-12-04 13:22:46 27 4
gpt4 key购买 nike

我在整个应用程序中都需要数据库中的一些主数据。那么在应用程序中定义这些数据的最佳方法是什么?以及我应该在应用程序中的何处定义,以便每次应用程序启动时我都会在我的应用程序中初始化此主数据。我应该在哪里定义从数据库获取数据的方法?

using System.Linq;
using System.Threading.Tasks;
using Abp.Application.Services.Dto;
using Abp.Authorization;
using Abp.Runtime.Caching;
using Test.Authorization;
using Test.Caching.Dto;

namespace Test.Caching
{
[AbpAuthorize(AppPermissions.Pages_Administration_Host_Maintenance)]
public class CachingAppService : TestAppServiceBase, ICachingAppService
{
private readonly ICacheManager _cacheManager;

public CachingAppService(ICacheManager cacheManager)
{
_cacheManager = cacheManager;
}

public ListResultDto<CacheDto> GetAllCaches()
{
var caches = _cacheManager.GetAllCaches()
.Select(cache => new CacheDto
{
Name = cache.Name
})
.ToList();

return new ListResultDto<CacheDto>(caches);
}

public async Task ClearCache(EntityDto<string> input)
{
var cache = _cacheManager.GetCache(input.Id);
await cache.ClearAsync();
}

public async Task ClearAllCaches()
{
var caches = _cacheManager.GetAllCaches();
foreach (var cache in caches)
{
await cache.ClearAsync();
}
}
}
}

Startup.cs 代码:
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddMemoryCache();
}

最佳答案

此答案基于 Entity Caching 的文档.

What is the best way to define this data in the application?



作为缓存项:

[AutoMapFrom(typeof(Person))]
public class PersonCacheItem
{
public string Name { get; set; }
}

Where should I define in the application so that every time applications starts I will initialize this master data in my application? How to add my data to cache? Where do I need to add data to cache?



您不初始化主数据(也不将数据添加到 IEntityCache )。它是懒加载的。

默认缓存过期时间为 60 分钟。它在滑动。因此,如果您在 60 分钟内未使用缓存中的项目,它会自动从缓存中删除。您可以为所有缓存或特定缓存配置它。

// Configuration for a specific cache
Configuration.Caching.Configure("MyCache", cache =>
{
cache.DefaultSlidingExpireTime = TimeSpan.FromHours(8);
});

这个代码应该放在 预初始化 你的模块的方法。

Where should I define the method which will fetch data from DB?



您没有定义方法。只需注入(inject)一个 IRepository .指定 cacheName 如果上面配置。

public class PersonCache : EntityCache<Person, PersonCacheItem>, IPersonCache, ITransientDependency
{
public PersonCache(ICacheManager cacheManager, IRepository<Person> repository)
: base(cacheManager, repository, "MyCache") // "MyCache" is optional
{
}
}

public interface IPersonCache : IEntityCache<PersonCacheItem>
{
}

How will I get data from cache?



使用 Person 缓存的示例类:

public class MyPersonService : ITransientDependency
{
private readonly IPersonCache _personCache;

public MyPersonService(IPersonCache personCache)
{
_personCache = personCache;
}

public string GetPersonNameById(int id)
{
return _personCache[id].Name; // alternative: _personCache.Get(id).Name;
}
}

关于aspnetboilerplate - 如何在 ASP.NET Boilerplate 中使用缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47648086/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com