在ASP.NET WebAPI 中使用缓存【Redis】
初步看了下CacheCow与OutputCache,感觉还是CacheOutput比较符合自己的要求,使用也很简单
PM>Install-Package Strathweb.CacheOutput.WebApi2
基础使用
CacheOutput特性
[Route("get")]
[CacheOutput(ClientTimeSpan = 60, ServerTimeSpan = 60)]
public IEnumerable<string> Get()
{
return new string[] { "Tom", "Irving" };
}
以参数为key
[Route("get")]
[CacheOutput(ServerTimeSpan = 50, 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
在ASP.NET WebAPI 中使用缓存【Redis】的更多相关文章
- [转]在ASP.NET WebAPI 中使用缓存【Redis】
初步看了下CacheCow与OutputCache,感觉还是CacheOutput比较符合自己的要求,使用也很简单 PM>Install-Package Strathweb.CacheOutpu ...
- ASP.Net Core使用分布式缓存Redis从入门到实战演练
一.课程介绍 人生苦短,我用.NET Core!缓存在很多情况下需要用到,合理利用缓存可以一方面可以提高程序的响应速度,同时可以减少对特定资源访问的压力. 所以经常要用到且不会频繁改变且被用户共享的 ...
- 关于ASP.NET WebAPI中HTTP模型的相关思考
对于.NET的分布式应用开发,可以供我们选择的技术和框架比较多,例如webservice,.net remoting,MSMQ,WCF等等技术.对于这些技术很多人都不会陌生,即时没有深入的了解,但是肯 ...
- asp.net mvc5中使用缓存依赖SqlCacheDependency
缓存是用来提高应用性能,降低服务器压力.适用于数据不易变,数据易通用的情景, 对于动态查询数据,例如数据分析,最好放弃使用缓存.使用缓存最麻烦的就是保持源数据和缓存的中的数据一致. 缓存(Cache) ...
- ASP.NET Core中的缓存[1]:如何在一个ASP.NET Core应用中使用缓存
.NET Core针对缓存提供了很好的支持 ,我们不仅可以选择将数据缓存在应用进程自身的内存中,还可以采用分布式的形式将缓存数据存储在一个“中心数据库”中.对于分布式缓存,.NET Core提供了针对 ...
- ASP.NET Core 中的缓存
目录 缓存的基本概念 缓存原理 缓存设计 分布式缓存 Memcache 与 Redis 的比较 缓存穿透,缓存击穿,缓存雪崩解决方案 数据一致性 使用内置 MemoryCache 使用分布式缓存 Re ...
- 在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 WebAPI 中的异常处理
原文链接:https://docs.microsoft.com/en-us/aspnet/web-api/overview/error-handling/exception-handling 本文介绍 ...
随机推荐
- vim符号列表窗口
有时使用vim开发时,需要能够直观的查看文件的符号列表或者变量list,但是vim不直接支持这个功能,需要使用ctags的插件支持. 以下是在ubuntu下的详细设置方法: 步骤1:安装ctags u ...
- 为何PHP插入mysql的中文是乱码?【坑】
依然没有找到最终的解决方法,PHP插入的中文在phpmyadmin中看是乱码,但是用PHP获取之后显示正常: 可以在phpmyadmin中直接插入中文,在PHPmyadmin中显示正常,用PHP获取中 ...
- CSS布局(一)
本节内容: 没有布局 display属性 margin:auto; max-width 盒模型 没有布局 如果想把所有内容都塞进一栏里,那么不用设置任何布局也是可以的.然而,如果用户把浏览器窗口调整的 ...
- 基于webmagic的爬虫小应用--爬取知乎用户信息
听到“爬虫”,是不是第一时间想到Python/php ? 多少想玩爬虫的Java学习者就因为语言不通而止步.Java是真的不能做爬虫吗? 当然不是. 只不过python的3行代码能解决的问题,而Jav ...
- UI设计中px、pt、ppi、dpi、dp、sp之间的关系
UI设计中px.pt.ppi.dpi.dp.sp之间的关系 武汉AAA数字艺术教育 2015-07-24 14:19:50 职业教育 pi px 阅读(3398) 评论(0) 声明:本文由入驻搜狐公众 ...
- ASP数组全集,多维数组和一维数组[转]
ASP数组是比较好用的装载大量数据的容器.1 定义数组 有两种方式:DIM和REDIM. DIM定义的是固定个数.数据类型的数组:而REDIM则不同,它可以定义不同类型的数据,也可以定义个数并非固定的 ...
- C#实现:给定任意要给字符串,输出所有可能的回文的子字符串集合。
class Program { static void Main(string[] args) { string testStr = "sdfadfdsfadfdsfsdf"; i ...
- 第四章 使用Docker镜像和仓库
第4章 使用Docker镜像和仓库 回顾: 回顾如何使用 docker run 创建最基本的容器 $sudo docker run -i -t --name another_container_mum ...
- Linux下VFP NEON浮点编译
http://blog.csdn.net/liujia2100/article/details/27236477 NEON:SIMD(Single Instruction Multiple Data ...
- Win10上使用SVN遇到的一些问题
最近使用上了Win10,遇到了很多问题,前一段时间是MVC3项目的问题,今天又遇到了SVN工具使用的相关问题.我这个环境是WIN 10,64位,SVN工具是TortoiseSVN-1.9.2.2680 ...