欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

.net webservice数据缓存,该怎么解决

更新时间: 2014-01-05 02:00:28 责任编辑: Author_N1

 

.net webservice数据缓存
需求:根据一本书的ID返回此本书的详细信息函数为getBookInfo(string bookId),当我在客户端调用的时候只要bookId不变我就直接从缓存里面去。如果bookId变了,我再缓存一个?但同时可以执行一些其它操作,现有两种方式如:
1、[WebMethod(CacheDuration = 600)]
    public Book get(string bookId)
    {
        //执行一些其它操作doSomething();
        getBookInfo(string bookId);
    }
此种方式可以缓存,并你多次传入不同的bookId他都会把几本书的信息都缓存,但你在缓存有效期内去调原来调过的书就不需要访问数据库了,虽然getBookInfo()得到的数据是缓存了,但是它也没有执行其它操作doSomething();
我现在是需要只缓存getBookInfo就需要使用另一种方式数据缓存
2、Context.Cache.Insert(……)
需要依赖bookId的改变来改变,需要怎么弄?谢谢,请给我一个详细的解决方案和例子
--参考方法--
“依赖bookId的改变来改变”?什么意思?缓存依赖跟这个毫无关系

public static Book getBookInfo(string bookId)
{
    var cache= HttpRuntime.Cache;
    var cacheKey="Book:id="+bookId;
    var result=(Book)cache[cacheKey];
    if(result==null)
    {
       result=查询数据库读取Book信息(bookId);
       cache.Insert(cacheKey,result,getBooksSqlDependency());
    }
    return result;
}


这里,我没有实现getBooksSqlDependency这个方法,因为我并不使用Sql Server,所以对SqlDependency非常陌生,我使用自己的CacheDependency。你可以使用SqlDependency技术来实现。

这里我举一个非常简化的方法来说明Dependency的大体用法。你可以这样实现这个方法:
public static CacheDependency getBooksSqlDependency()
{
    return new CacheDependency(null,new string[]{"Book数据最后更新时间"},DateTime.Now);
}


这就可以了,它使得你的所有的Book:id=xxx为索引的缓存数据的生命期都被“Book数据最后更新时间”这个缓存数据控制。当你的程序在任何地方修改了数据库的Book对象时,就写一条语句:
HttpRuntime.Cache["Book数据最后更新时间"]=DateTime.Now;


这样所有Book:id=xxx为索引的缓存数据就都自动过期,从而下一次访问getBookInfo方法时会自动读取最新数据。
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:00:28
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/4443/
本文WWW.DOC100.NET DOC100.NET版权所有。