namespace Dpz.Core.Service;

[Obsolete("缓存辅助接口已过时,请使用 CacheAttribute 配合源生成缓存装饰器。")]
public interface ICacheService
{
    string BuildCacheKey(string method, object? parameters = null);

    /// <summary>
    /// 从缓存获取数据或通过工厂方法设置缓存
    /// </summary>
    Task<T> GetOrSetCacheAsync<T>(
        string methodName,
        Func<FusionCacheFactoryExecutionContext<T>, CancellationToken, Task<T>> factory,
        object? parameters = null,
        Action<FusionCacheEntryOptions>? setupAction = null,
        CancellationToken cancellationToken = default
    );

    /// <summary>
    /// 尝试从缓存获取数据
    /// </summary>
    ValueTask<MaybeValue<T>> TryGetFromCacheAsync<T>(
        string methodName,
        object? parameters = null,
        CancellationToken cancellationToken = default
    );

    /// <summary>
    /// 设置缓存数据
    /// </summary>
    Task SetCacheAsync<T>(
        string methodName,
        T value,
        object? parameters = null,
        CancellationToken cancellationToken = default,
        params string[] additionalTags
    );

    /// <summary>
    /// 移除缓存
    /// </summary>
    /// <param name="methodName"></param>
    /// <param name="parameters"></param>
    /// <param name="cancellationToken">传播通知操作应取消的通知令牌</param>
    /// <returns></returns>
    Task RemoveCacheAsync(
        string methodName,
        object? parameters = null,
        CancellationToken cancellationToken = default
    );

    /// <summary>
    /// 获取分页数据或通过工厂方法设置缓存
    /// </summary>
    /// <param name="methodName"></param>
    /// <param name="factory"></param>
    /// <param name="parameters"></param>
    /// <param name="setupAction"></param>
    /// <param name="cancellationToken">传播通知操作应取消的通知令牌</param>
    /// <param name="additionalTags"></param>
    /// <typeparam name="T"></typeparam>
    /// <returns></returns>
    Task<IPagedList<T>> GetOrSetPagedListAsync<T>(
        string methodName,
        Func<List<string>, CancellationToken, Task<IPagedList<T>>> factory,
        object? parameters = null,
        Action<FusionCacheEntryOptions>? setupAction = null,
        CancellationToken cancellationToken = default,
        params string[] additionalTags
    );

    /// <summary>
    /// 根据方法名称清除缓存
    /// </summary>
    /// <returns></returns>
    ValueTask RemoveByMethodAsync(string methodName, CancellationToken cancellationToken = default);

    /// <summary>
    /// 根据前缀清除缓存
    /// </summary>
    /// <returns></returns>
    ValueTask RemoveByPrefixAsync(CancellationToken cancellationToken = default);
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

代码解释

这是一个缓存服务接口(ICacheService),定义了缓存操作的核心方法。该接口被标记为 [Obsolete](已过时),建议使用 CacheAttribute 配合源生成缓存装饰器替代。

主要功能模块

1. 缓存键构建

string BuildCacheKey(string method, object? parameters = null);
  • 根据方法名和参数生成唯一的缓存键

2. 核心缓存操作

GetOrSetCacheAsync

Task<T> GetOrSetCacheAsync<T>(...)
  • 获取或设置缓存的典型模式
  • 如果缓存存在则返回缓存数据
  • 如果不存在则通过 factory 工厂方法获取数据并缓存
  • 支持自定义缓存配置(setupAction)

TryGetFromCacheAsync

ValueTask<MaybeValue<T>> TryGetFromCacheAsync<T>(...)
  • 尝试从缓存获取数据
  • 使用 MaybeValue<T> 表示可能存在或不存在的值

SetCacheAsync

Task SetCacheAsync<T>(...)
  • 直接设置缓存数据
  • 支持附加标签(additionalTags)用于批量管理

3. 缓存清除

RemoveCacheAsync

Task RemoveCacheAsync(...)
  • 根据方法名和参数移除特定缓存项

RemoveByMethodAsync

ValueTask RemoveByMethodAsync(...)
  • 清除指定方法的所有缓存

RemoveByPrefixAsync

ValueTask RemoveByPrefixAsync(...)
  • 根据前缀批量清除缓存

4. 特殊场景支持

GetOrSetPagedListAsync

Task<IPagedList<T>> GetOrSetPagedListAsync<T>(...)
  • 专门处理分页数据的缓存
  • 支持标签管理,便于批量失效

设计特点

  1. 基于 FusionCache:使用 FusionCacheFactoryExecutionContext 和 FusionCacheEntryOptions
  2. 异步优先:所有方法均为异步操作
  3. 灵活配置:支持自定义缓存选项和工厂方法
  4. 标签管理:通过 additionalTags 实现缓存分组管理
  5. 取消支持:所有方法都支持 CancellationToken

使用场景

适用于需要集中管理缓存逻辑的服务层,尤其是在数据库查询、远程API调用等耗时操作中实现缓存层。

评论加载中...