项目

微服务解决方案:分布式缓存

您需要拥有ABP商业版或更高版本的许可证才能创建微服务解决方案。

分布式缓存是分布式系统中提升性能的常用模式,通过将频繁访问的数据存储在缓存中实现。本文档解释了微服务解决方案模板中分布式缓存机制的工作原理。更多详细信息可查阅分布式缓存文档。

微服务解决方案中的分布式缓存

微服务解决方案模板使用Redis实现分布式缓存机制。您可以在相关项目的appsettings.json文件中配置Redis连接。以下为配置示例:

  "Redis": {
    "Configuration": "localhost:6379"
  },
  "AbpDistributedCache": {
    "KeyPrefix": "Bookstore:"
  }

此外,您还可以在ConfigureServices方法中配置分布式缓存键前缀。当多个应用共用同一Redis服务器时,此方法有助于避免键名冲突。微服务解决方案模板中的现有服务均已包含此配置。示例如下:

Configure<AbpDistributedCacheOptions>(options =>
{
    options.KeyPrefix = configuration["AbpDistributedCache:KeyPrefix"] ?? "";
});

应用层通常需要分布式缓存机制来存储频繁访问的数据。您可以在应用服务类中注入IDistributedCache<TCacheItem, TCacheKey>接口并使用它来缓存数据。示例:

public class BookService : ITransientDependency
{
    private readonly IDistributedCache<BookCacheItem, Guid> _cache;

    public BookService(IDistributedCache<BookCacheItem, Guid> cache)
    {
        _cache = cache;
    }

    public async Task<BookCacheItem> GetAsync(Guid bookId)
    {
        return await _cache.GetOrAddAsync(
            bookId, //使用Guid类型作为缓存键
            async () => await GetBookFromDatabaseAsync(bookId),
            () => new DistributedCacheEntryOptions
            {
                AbsoluteExpiration = DateTimeOffset.Now.AddHours(1)
            }
        );
    }
    private Task<BookCacheItem> GetBookFromDatabaseAsync(Guid bookId)
    {
        //TODO: 从数据库获取数据
    }
}

最后,您可以使用实体缓存功能,该功能提供了预设的缓存机制。当请求的条目不在缓存中时,它会从数据库检索数据;当相关数据被操作时,它会自动从缓存中移除相应条目,确保数据一致性。


在本文档中