当前位置: 首页 > news >正文

WebService的缓存机制

 

分类: .NET ASP
webservice string 数据库 null application web服务

WebService的缓存分为两种,一种是简单的输出缓存,一种是强大的数据缓存

一、输出缓存
输出缓存的使用非常简单,比较适用于WebService的参数比较少,结果比较单一的情况,例如股票信息,可以设置5-10秒的缓存,天气预报,则可以设置30分钟甚至数小时的缓存

使用方法是:
在WebMethod属性上指定CacheDuration属性即可,例如



这样,600秒内这个WebService的所有输出数据都将从缓存中读取,不会真正做数据处理,如果事务代码是访问数据库的话,现在这种方法就会比每次都访问数据库快得多。这种缓存适合初接触WebService的新手使用。

[WebMethod(Description = “Test”,CacheDuration=600)]
public string Test()
{
return “Test”;
}

 

 

要注意的是,不是所有服务都适合使用这种缓存,例如每次结果都不一样的,访问数极高的服务,缓存将会变得非常大,占用很多服务器的内存,却没有实际效果。

二、数据缓存
想将你的WebService某些运行数据保存起来?如果不使用本地的数据库或者文件,那么缓存是最好的选择。这种缓存不同于上面提到的输出缓存,它需要编写代码来实现,但是相对应的,它的功能非常强大,可以存放任何类型的信息,并且你可以在任何时候检索它。

 

虽然也可以使用Application来模拟缓存,但是这需要你自己管理内存释放、用户并发问题,在.net时代已经被抛弃,WebService下的缓存使用Cache这个集合

 

using System.Web.Caching;
[WebMethod(Description = “Test”)]
public string Test()
{
string Content = “just4test”;

 

//创建数据缓存
Context.Cache.Insert(”Test”, Content, null, DateTime.MaxValue,TimeSpan.Zero, CacheItemPriority.NotRemovable, null);

string result = Context.Cache[”Test”].ToString();
return result;
}
}

 

在这里,我们使用了Context.Cache属性,Context.Cache.Insert方法用于将数据加入缓存。这个方法一共有4种重载, 在这个例子中,我们使用的是功能最全面的重载版本,我们以此为例:每一个参数分别是键名(使用方法类似于Session),值,依赖性,绝对过期时间,可 变过期时间,缓存优先级,缓存项目删除时的委托方法绝对过期时间是固定的,DataTime.MaxValue在这里表示永不过期;可变过期时间是一定时 间内该缓存没有使用则自动失效,此处TimeSpan.Zero表示不使用可变过期。注意两者只能设置一项,如果要使用可变过期,绝对过期必须是 DataTime.MaxValue,例如

Context.Cache.Insert("Test", Content, null, DateTime.MaxValue, TimeSpan.FromMinutes(10));

缓存优先级是Web服务器清理它的可能性,在此的CacheItemPriority.NotRemovable表示通常不从缓存中删除,可以理解为永久性缓存

通过依赖性,可以监视某个文件或者其他缓存的改动,如果有变化,则此缓存失效,这非常有实用价值。例如:

CacheDependency de = new CacheDependency(Server.MapPath("1.xml"));
Context.Cache.Insert("Test", Content, de, DateTime.MaxValue, TimeSpan.Zero, CacheItemPriority.NotRemovable, null);

这样,1.xml文件被删除或者更改的时候,缓存就会失效

 

转自  --

http://blog.sina.com.cn/s/blog_48212cbe0100jqzr.html

转载于:https://www.cnblogs.com/zhengah/p/4780371.html

相关文章:

  • Linux压缩打包方法连载之三:bzip2, bzcat 命令
  • 用MonoDevelop开发Linux游戏
  • Android 服务类Service 的详细学习
  • Android获取返回键的点击事件
  • 赢得Docker挑战最佳实践
  • 小蚂蚁学memcache笔记—php操作memcache(2)
  • ipv6现状,加英文的中括号访问, ipv6测试http://test-ipv6.com
  • git学习------git commit命令的默认编辑器的修改
  • 新浪、万网前系统架构师高俊峰:统一监控报警平台架构设计思路
  • HTLM5 WebSocket权威指南
  • NSString+URLEncoding.h --使用Obj-C对数据等进行URLEncoding编码
  • 安卓很抱歉已停止运行
  • oracle中execute immediate的使用(select/insert/update/delete)(转)
  • log4j.properties模板
  • BZOJ 1324 Exca神剑 最小割
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • Facebook AccountKit 接入的坑点
  • idea + plantuml 画流程图
  • Median of Two Sorted Arrays
  • Vue组件定义
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 从PHP迁移至Golang - 基础篇
  • 分布式事物理论与实践
  • 后端_MYSQL
  • 看域名解析域名安全对SEO的影响
  • 老板让我十分钟上手nx-admin
  • 入门级的git使用指北
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 优秀架构师必须掌握的架构思维
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 你对linux中grep命令知道多少?
  • 【干货分享】dos命令大全
  • 通过调用文摘列表API获取文摘
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • (Git) gitignore基础使用
  • (Python第六天)文件处理
  • (待修改)PyG安装步骤
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (过滤器)Filter和(监听器)listener
  • (论文阅读40-45)图像描述1
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (三) diretfbrc详解
  • (一)插入排序
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .net web项目 调用webService
  • .NET处理HTTP请求
  • .NET建议使用的大小写命名原则
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • :中兴通讯为何成功
  • ?php echo ?,?php echo Hello world!;?
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成