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>(...)
- 专门处理分页数据的缓存
- 支持标签管理,便于批量失效
设计特点
- 基于 FusionCache:使用
FusionCacheFactoryExecutionContext和FusionCacheEntryOptions - 异步优先:所有方法均为异步操作
- 灵活配置:支持自定义缓存选项和工厂方法
- 标签管理:通过
additionalTags实现缓存分组管理 - 取消支持:所有方法都支持
CancellationToken
使用场景
适用于需要集中管理缓存逻辑的服务层,尤其是在数据库查询、远程API调用等耗时操作中实现缓存层。
AI 正在分析代码…
评论加载中...