翻译自:https://github.com/App-vNext/Polly/wiki/Implementing-new-cache-providers
点此跳转到系列目录
缓存: 实现新的缓存供应器
Polly CachePolicy
允许任何第三方缓存提供商通过简单的实现接口·ISyncCacheProvider和
IAsyncCacheProvider整合进
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
点此跳转到系列目录