初步看了下CacheCowOutputCache,感觉还是CacheOutput比较符合自己的要求,使用也很简单

PM>Install-Package Strathweb.CacheOutput.WebApi2

基础使用

CacheOutput特性

        [Route("get")]
[CacheOutput(ClientTimeSpan = , ServerTimeSpan = )]
public IEnumerable<string> Get()
{
return new string[] { "Tom", "Irving" };
}

以参数为key

        [Route("get")]
[CacheOutput(ServerTimeSpan = , ExcludeQueryStringFromCacheKey = true)]
public string Get(int id)
{
return DateTime.Now.ToString();
}

Etag头

使用Redis

客户端使用StackExchange.RedisInstall-Package StackExchange.Redis.StrongName

在Autofac中注册Redis连接

          var builder = new ContainerBuilder();
//注册api容器的实现
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
//注册mvc容器的实现
// builder.RegisterControllers(Assembly.GetExecutingAssembly());
//在Autofac中注册Redis的连接,并设置为Singleton
builder.Register(r =>
{
return ConnectionMultiplexer.Connect(DBSetting.Redis);
}).AsSelf().SingleInstance();
var container = builder.Build();
GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);

通过构造注入即可

/// <summary>
///Redis服务
/// </summary>
public class RedisService : IRedisService
{
private static readonly Logger logger = LogManager.GetCurrentClassLogger(); /// <summary>
///Redis服务
/// </summary>
private readonly ConnectionMultiplexer _connectionMultiplexer; /// <summary>
/// 构造函数
/// </summary>
/// <param name="connectionMultiplexer">Redis服务</param>
public RedisService(ConnectionMultiplexer connectionMultiplexer)
{
_connectionMultiplexer = connectionMultiplexer;
} /// <summary>
/// 根据KEY获得值
/// </summary>
/// <param name="key">key</param>
/// <returns></returns>
public async Task<WebAPIResponse> Get(string key)
{
try
{
var db = _connectionMultiplexer.GetDatabase();
/*
var set = await db.StringSetAsync("name", "irving");
var get = await db.StringGetAsync("name");
*/
return new WebAPIResponse
{
IsError = false,
Msg = string.Empty,
Data = await db.StringGetAsync(key)
};
}
catch (Exception ex)
{
logger.Error(ex, "RedisService Get Exception : " + ex.Message);
return new WebAPIResponse
{
IsError = false,
Msg = string.Empty,
Data = string.Empty
};
}
}
}

CacheOutput与Redis

默认CacheOutput使用System.Runtime.Caching.MemoryCache来缓存数据,可以自定义扩展到DB,Memcached,Redis等;只需要实现IApiOutputCache接口

public interface IApiOutputCache
{
T Get<T>(string key) where T : class;
object Get(string key);
void Remove(string key);
void RemoveStartsWith(string key);
bool Contains(string key);
void Add(string key, object o, DateTimeOffset expiration, string dependsOnKey = null);
}

实现服务

/// <summary>
/// 实现Redis服务
/// </summary>
public class RedisCacheProvider : IApiOutputCache
{
/// <summary>
///Redis服务
/// </summary>
private readonly ConnectionMultiplexer _connectionMultiplexer; /// <summary>
/// 构造函数
/// </summary>
/// <param name="connectionMultiplexer">Redis服务</param>
public RedisCacheProvider(ConnectionMultiplexer connectionMultiplexer)
{
_connectionMultiplexer = connectionMultiplexer;
} public void Add(string key, object o, DateTimeOffset expiration, string dependsOnKey = null)
{
throw new NotImplementedException();
} public IEnumerable<string> AllKeys
{
get { throw new NotImplementedException(); }
} public bool Contains(string key)
{
throw new NotImplementedException();
} public object Get(string key)
{
var db = _connectionMultiplexer.GetDatabase();
return db.StringGet(key);
} public T Get<T>(string key) where T : class
{
throw new NotImplementedException();
} public void Remove(string key)
{
throw new NotImplementedException();
} public void RemoveStartsWith(string key)
{
throw new NotImplementedException();
}
}

注册WebAPIConfig

configuration.CacheOutputConfiguration().RegisterCacheOutputProvider(() => RedisCacheProvider);

或者使用Autofac for Web API

var builder = new ContainerBuilder();
builder.RegisterInstance(new RedisCacheProvider());
config.DependencyResolver = new AutofacWebApiDependencyResolver(builder.Build());

REFER:
Lap around Azure Redis Cache

http://azure.microsoft.com/blog/2014/06/04/lap-around-azure-redis-cache-preview/

Caching data in Azure Redis Cache

https://msdn.microsoft.com/en-us/library/azure/dn690521.aspx

ASP.NET Output Cache Provider for Azure Redis Cache

https://msdn.microsoft.com/en-us/library/azure/dn798898.aspx

How to use caching in ASP.NET Web API?

http://stackoverflow.com/questions/14811772/how-to-use-caching-in-asp-net-web-api

Output caching in ASP.NET Web API

http://www.strathweb.com/2012/05/output-caching-in-asp-net-web-api/

NuGet Package of the Week: ASP.NET Web API Caching with CacheCow and CacheOutput

http://www.hanselman.com/blog/NuGetPackageOfTheWeekASPNETWebAPICachingWithCacheCowAndCacheOutput.aspx

使用CacheCow和ETag缓存资源

http://www.cnblogs.com/fzrain/p/3618887.html

ASP.NET WebApi - Use Redis as CacheManager

http://www.codeproject.com/Tips/825904/ASP-NET-WebApi-Use-Redis-as-CacheManager

RedisReact

https://github.com/ServiceStackApps/RedisReact

.Net缓存管理框架CacheManager

http://www.cnblogs.com/JustRun1983/p/CacheManager.html

---------------------
作者:Irving
来源:CNBLOGS
原文:https://www.cnblogs.com/Irving/p/4618556.html
版权声明:本文为作者原创文章,转载请附上博文链接!

最新文章

  1. SequenceInputStream
  2. jq分页异步刷新 ,全局刷新问题
  3. 如何更改tableView cell的accessoryView位置,如何让首尾的Separator不显示
  4. IOS设计模式的六大设计原则之开放-关闭原则(OCP,Open-Close Principle)
  5. VS(C++)编程遇到的错误集合
  6. CSS_样式sample
  7. 手动调整导航控制器中的viewcontroller
  8. Sqlla: 数据库操作从未如此简单
  9. 阿凡题UWP的源码公开
  10. Zabbix实战-简易教程(6)--Server端高可用
  11. mac-os安装autojump
  12. Android视频录制从不入门到入门系列教程(二)————显示视频图像
  13. 「AHOI / HNOI2017」影魔
  14. Redis自学笔记:4.3进阶-排序
  15. jmeter将JDBC Request查询出的数据作为下一个接口的参数
  16. luogu3707 相关分析 (线段树)
  17. NOIP 普及组 2014 螺旋矩阵
  18. vs code 插件收集
  19. 在Delphi中DBGrid有一个MouseMove事件,当鼠标移动时怎么知道光标在哪个单元格上面
  20. 只有自己看的懂的vue 二叉树的3级联动

热门文章

  1. spring拦截器Interceptor
  2. Vue调试神器之Vue.js devTools
  3. 一文纵览EMAS 到底内含多少阿里核心技术能力
  4. 关于Apple Watch,听听开发了两个月Watch App的工程师怎么说
  5. 在window.onload中使用setTimeout
  6. spring data jpa 原生sql 别名字段无法注入
  7. oracle 共享SQL语句
  8. 谷歌BERT预训练源码解析(一):训练数据生成
  9. Java变量以及内存分配
  10. QQ 第三方登录