很多人都知道什么叫缓存,甚至学习过,但用起来还真难用。我经过几天的学习cache想跟大家分享和讨论。 我是带着疑问去学习的。缓存是用在什么地方,有什么好处。 缓存就是把获取的数据暂时存到内存中,当获取的数据没有变化时就还是用内存里的东西。评论中有人说缓存可用文件,数据库存。这个我同意,但一般编程都用微软中system.web.caching.cache 类,它是在把数据放在内存中。可能有人会问怎么判断获取的数据没有变化?这个等下会说到。这样从缓存数据可是获取数据速度快很多,但要求数据不时时常变化的。像博客园里的博客排行榜,基本没变化,这是虽是数据不怎么变化,但这样页面每个人浏览都是一样的东西,那又何必用缓存干什么呢?直接把此页面生成html,这样打开的速度比用缓存还快。 当一个页面既有公共部分(每个人浏览的都一样)又有个性部分(自己的信息)。比如当当网里就有个购物车当你购完物时,底单上面有推荐买的产品(这也产品可能一天换一次),当然推荐的产品跟你买的产品有关,此时不能生成html了,因为不是每个人浏览此页面都相同,只有当用户买的产品相关到推荐的产品相同时。此时就要用缓存存此推荐产品的数据,当然这个缓存键值是跟买的产品有关,只要买的产品相关得到的推荐产品(这里面有一种关系在里面)才能该缓存的东西。 打个比方:当你买书时就会推荐其他好书给你,此时买书的推荐书都一样,调用的缓存都一样,而买电脑的话可能会推荐你各种好电脑给你,这时调用推荐电脑的缓存。 上面可能讲了下缓存用在什么地方,当然我只知道这种情况,可能还有其他情况,那位知道可评论下。 缓存的好处当然是减轻服务器的负担,加快浏览速度。但如果缓存用得不好,可能得到的数据是过时的,或者反而使浏览熟读更慢。(当你缓存经常变化的数据时)
缓存有分客户端缓存服务器端缓存吗? 两个都有,只是客户端缓存内嵌在浏览器中,基本上是浏览器自动处理缓存。 . 客户端缓存可以有效地减轻服务器端负载。首先了解一下 HTTP 头:Last-Modified 与 If-Modified-Since。简单的说,Last-Modified 与If-Modified-Since 都是用于记录页面最后修改时间的 HTTP 头信息,只是 Last-Modified 是由服务器往客户端发送的 HTTP 头,而 If-Modified-Since 则是由客户端往服务器发送的头实现。 在浏览器可设置浏览器如何使用缓存的。一般默认是自动。操作步骤如下: 工具-》internet选项-》常规-》设置-》检查网页的较新版本中有四个选项来控制缓存的运用 当然代码可控制客户端缓存,比如比想要浏览器缓存东西可用下面代码 html禁用客户端缓存 <META HTTP-EQUIV="pragma" CONTENT="no-cache"> C#中禁止cache的方法! 我对客户端缓存知道太少,而且我们写程序也很少写客户端缓存, 希望有人提供更多关于客户端缓存的东西。 服务端缓存有System.Web.Caching.cahe和memcached 当然System.Web.Caching.cahe是微软写的类,而memcached是第三方插件。System.Web.Caching.cache目前还不是分布式缓存,只能在一台电脑上(07时候),而 memcached是分布式的高速缓存。 服务器缓存可分为三种缓存 1.输出缓存: 要实现页面输出缓存,只要将一条 OutputCache 指令添加到页面即可。 2.片段缓存: 示例 <%@ OutputCache Duration="60" VaryByParam="*" %> 该示例将缓存用户控件60秒,并且将针对查询字符串的每个变动、针对此控件所在的每个页面创建单独的缓存条目。<%@ OutputCache Duration="60" VaryByParam="none" 最后,该示例将缓存用户控件60秒,并且将针对每个浏览器名称和主要版本创建一个缓存条目。然后,每个浏览器的缓存条目将由引用此用户控件的所有页面共享(只要所有页面都用相同的ID引用该控件即可)。
3.编程用得最多的缓存:数据缓存 System.Web.Caching.cahe被httpRuntime.Cache或HttpContext.Current.Cache实例化。httpRuntime.Cache,HttpContext.Current.Cache是内置对象就想当与seesion。
HttpContext.Current.Cache与HttpRuntime.Cache区别: HttpContext.Current.Cache:为当前 HTTP 请求获取Cache对象。 HttpRuntime.Cache:获取当前应用程序的Cache。HttpContext.Current.Cache是调用了 HttpRuntime.Cache,且HttpContext.Current.Cache是用在web程序上,而HttpRuntime.Cache是用在任何程序上。System.web命名空间下。 其实HttpContext.Current.Cache是通过 HttpRuntime.Cache来实现的,所以一般实例化最好通过HttpRuntime.Cache来实例化: 例如:System.Web.Caching.Cache cache = HttpRuntime.Cache
System.Web.Caching.Cache有很多方法,但方法中add中是存缓存 参数中有缓存时间,依赖项。 缓存时间即到当缓存的东西达到指定时间就让缓存失效,而依赖项是当依赖项发生变化就会使缓存失效。 依赖项有一般依赖项 CacheDependency和数据库依赖项SqlCacheDependency。 虽然CacheDependency类完成了很重要的功能,但其组成结构却比较简单,主要有两个属性和一个方法。 CacheDependency 例如 Cache.Insert("key", myXMLFileData, DateTime.Now.AddMinutes(1),,new users.xml文件就相当一般依赖项,当xml文件被改了,则此缓存失效。 SqlCacheDependency一般是增对数据库的,这个设置需要在config里设置,而且还要启动数据库的这样服务。 Cache.Insert 中可设置跟数据库中那个表关联,一旦表有变化就会导致cache失效。 可到网上查询如何使用 (责任编辑:admin) |