11.1 Polly-实现新的缓存供应器

翻译自:https://github.com/App-vNext/Polly/wiki/Implementing-new-cache-providers
点此跳转到系列目录

缓存: 实现新的缓存供应器

Polly CachePolicy允许任何第三方缓存提供商通过简单的实现接口·ISyncCacheProviderIAsyncCacheProvider整合进CachePolicy`中。

这两个接口都很容易实现,可以实现一个新的缓存提供程序。

ISyncCacheProvider

对于Polly v6:

public interface ISyncCacheProvider
{
    object Get(String key);
    void Put(string key, object value, Ttl ttl);
}

public interface ISyncCacheProvider<TResult>
{
    TResult Get(String key);
    void Put(string key, TResult value, Ttl ttl);
}

从Polly v7起的格式:

public interface ISyncCacheProvider
{
    (bool, object) TryGet(String key);
    void Put(string key, object value, Ttl ttl);
}

public interface ISyncCacheProvider<TResult>
{
    (bool, TResult) TryGet(String key);
    void Put(string key, TResult value, Ttl ttl);
}

如果缓存提供程序只能缓存特定类型的对象(例如,一些缓存提供程序通常将所有项缓存为字符串),则只实现通用接口ISyncCacheProvider<string>

如果缓存提供程序可以缓存任何类型的对象,则实现非泛型的ISyncCacheProvider。这个提供程序可以被使用:

  • 在非泛型的CachePolicy实例中,可以对任何’结果’使用泛型的.Execute<TResult>()重载方法执行
  • 也可以使用泛型的 CachePolicy<TResult>策略来管理强类型的TResult 得委托执行.Execute<TResult>(... Func<TResult>)

IAsyncCacheProvider

对于Polly v6:

public interface IAsyncCacheProvider
{
    Task<object> GetAsync(String key, CancellationToken cancellationToken, bool continueOnCapturedContext);
    Task PutAsync(string key, object value, Ttl ttl, CancellationToken cancellationToken, bool continueOnCapturedContext);
}

public interface IAsyncCacheProvider<TResult>
{
    Task<TResult> GetAsync(String key, CancellationToken cancellationToken, bool continueOnCapturedContext);
    Task PutAsync(string key, TResult value, Ttl ttl, CancellationToken cancellationToken, bool continueOnCapturedContext);
}

从Polly v7起的格式:

public interface IAsyncCacheProvider
{
    Task<(bool, object)> TryGetAsync(String key, CancellationToken cancellationToken, bool continueOnCapturedContext);
    Task PutAsync(string key, object value, Ttl ttl, CancellationToken cancellationToken, bool continueOnCapturedContext);
}

public interface IAsyncCacheProvider<TResult>
{
    Task<(bool, TResult)> TryGetAsync(String key, CancellationToken cancellationToken, bool continueOnCapturedContext);
    Task PutAsync(string key, TResult value, Ttl ttl, CancellationToken cancellationToken, bool continueOnCapturedContext);
}

实现中的任何await调用都应该修饰为.ConfigureAwait(continueOnCapturedContext).

ISyncCacheProvider相同的注释适用于泛型和非泛型版本。

社区贡献

欢迎向社区贡献其他的缓存器。 让我们知道,我们可以为Polly社区提供更广泛的缓存器(完全归功于最初的贡献者)。

翻译自:https://github.com/App-vNext/Polly/wiki/Implementing-new-cache-providers
点此跳转到系列目录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值