[转]在ASP.NET WebAPI 中使用缓存【Redis】
初步看了下CacheCow与OutputCache,感觉还是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.Redis,
Install-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 Cachehttp://azure.microsoft.com/blog/2014/06/04/lap-around-azure-redis-cache-preview/
Caching data in Azure Redis Cachehttps://msdn.microsoft.com/en-us/library/azure/dn690521.aspx
ASP.NET Output Cache Provider for Azure Redis Cachehttps://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 APIhttp://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 CacheOutputhttp://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-CacheManagerRedisReact
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
版权声明:本文为作者原创文章,转载请附上博文链接!
[转]在ASP.NET WebAPI 中使用缓存【Redis】的更多相关文章
- 在ASP.NET WebAPI 中使用缓存【Redis】
初步看了下CacheCow与OutputCache,感觉还是CacheOutput比较符合自己的要求,使用也很简单 PM>Install-Package Strathweb.CacheOutpu ...
- 关于ASP.NET WebAPI中HTTP模型的相关思考
对于.NET的分布式应用开发,可以供我们选择的技术和框架比较多,例如webservice,.net remoting,MSMQ,WCF等等技术.对于这些技术很多人都不会陌生,即时没有深入的了解,但是肯 ...
- asp.net mvc5中使用缓存依赖SqlCacheDependency
缓存是用来提高应用性能,降低服务器压力.适用于数据不易变,数据易通用的情景, 对于动态查询数据,例如数据分析,最好放弃使用缓存.使用缓存最麻烦的就是保持源数据和缓存的中的数据一致. 缓存(Cache) ...
- ASP.Net Core使用分布式缓存Redis从入门到实战演练
一.课程介绍 人生苦短,我用.NET Core!缓存在很多情况下需要用到,合理利用缓存可以一方面可以提高程序的响应速度,同时可以减少对特定资源访问的压力. 所以经常要用到且不会频繁改变且被用户共享的 ...
- 在asp.net WebAPI 中 使用Forms认证和ModelValidata(模型验证)
一.Forms认证 1.在webapi项目中启用Forms认证 Why:为什么要在WebAPI中使用Forms认证?因为其它项目使用的是Forms认证. What:什么是Forms认证?它在WebAP ...
- Asp.Net WebAPI 中Cookie 获取操作方式
1. /// <summary> /// 获取上下文中的cookie /// </summary> /// <returns></returns> [H ...
- ASP.NET Core中的缓存[1]:如何在一个ASP.NET Core应用中使用缓存
.NET Core针对缓存提供了很好的支持 ,我们不仅可以选择将数据缓存在应用进程自身的内存中,还可以采用分布式的形式将缓存数据存储在一个“中心数据库”中.对于分布式缓存,.NET Core提供了针对 ...
- [翻译] ASP.NET WebAPI 中的异常处理
原文链接:https://docs.microsoft.com/en-us/aspnet/web-api/overview/error-handling/exception-handling 本文介绍 ...
- ASP.NET Core 中的缓存
目录 缓存的基本概念 缓存原理 缓存设计 分布式缓存 Memcache 与 Redis 的比较 缓存穿透,缓存击穿,缓存雪崩解决方案 数据一致性 使用内置 MemoryCache 使用分布式缓存 Re ...
随机推荐
- golang之常量
1. 常量可以是全局常量,也可以是函数内部的局部常量.常量的值不可修改,常量表达式的值在编译期计算,而不是在运行期.存储在常量中的数据类型只可以是布尔型.数字型(整数型.浮点型和复数)和字符串型.当 ...
- node.js(二)各种模块
我们知道Node.js适合于IO密集型应用,不适合于CPU密集型应用. JS和Node.js区别: JS运行于客户端浏览器中,存在兼容性问题:数据类型:值类型+引用类型(ES+D ...
- 使用 Swift 构建自定义的ActivityIndicator View
目前在自己的个人项目里,已经开始使用Swift去编写代码.这篇文章把项目中自己设计的一个ActivityIndicator View展示给大家. 在开始之前,我们先看看最终的效果,如下图: 我建议大家 ...
- @codeforces - 715E@ Complete the Permutations
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定两个排列 p, q,他们中的有些位置被替换成了 0. 两个排 ...
- shell学习(23)- diff和patch
diff命令可以生成两个文件之间的差异对比. (1) 先创建下列用于演示的文件.文件 1:version1.txt this is the original text line2 line3 line ...
- laravel 极验(Geetest) 让验证更安全。
整理的有些仓促,在9月15号之后会更新更加详细更加全面的文档,供给大家参考,学习! 1.简述 在网站开发中使用频率最高的工具之一便是验证码,验证码在此也是多种多样,不过简单的图片验证码已经可以被机器识 ...
- GIL锁更加深刻理解
参考链接:http://www.cnblogs.com/ajaxa/p/9111884.html
- SharePoint开发中怎样使用Visual Studio给你的Web Part加入图标
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u012025054/article/details/36051545 SharePoint开发中怎样 ...
- 关闭myeclipse可视化视图
ctrl+w 关闭各个文件 重新打开即可 方法二:
- linux下安装使用MySQL 以及 python mysqldb 遇到的问题
一.安装mysql sudo apt-get install mysql-client-core-5.5 然后会出现: ERROR 2002 (HY000): Can't connect to loc ...