很多人都知道什么是缓存,甚至都研究过,但是真的很难用。经过几天对cache的研究,想和大家分享讨论一下。
我带着问题学习。缓存用在哪里,有什么好处。
缓存是指采集的数据暂时存储在缓存中,当采集的数据没有变化时,仍然使用缓存的内容。可能有人会问怎么判断采集的数据没有变化?我们以后再谈这个。通过这种方式,从缓存中获取数据要快得多,但需要数据不时发生变化。像博客公园里的博客列表,基本没有变化。这是因为虽然数据变化不大,但是大家在这个页面上浏览的都是一样的东西,为什么还要缓存呢?直接从这个页面生成html,打开速度会比缓存快。
当一个页面既有公共部分(每个人都浏览同样的东西)又有个人部分(自己的信息)时。比如当当网有个购物车。当你逛完之后,最下面的单子上有推荐的商品(这个商品可能一天换一次)。当然,推荐的产品和你买的产品有关。这时候就不能生成html了,因为不是每个人浏览这个页面都是一样的,只有当用户买的产品和相同的推荐产品相关的时候。此时,该推荐产品的数据应该存储在缓存中。当然这个缓存键值是和购买的产品相关的,只有和购买的产品相关的推荐产品(里面有关系)才可以缓存。
比如你买了一本书,其他的好书也会推荐给你。这个时候推荐的书都是一样的,调用的缓存都是一样的。买电脑的时候可能会被推荐给各种好电脑。这时候调用推荐电脑的缓存。
上面可能说了缓存用在哪里。当然我只知道这种情况,可能还有其他情况。知道的请评论。
缓存的好处当然是减轻服务器的负担,加快浏览速度。但是,如果没有很好地使用缓存,数据可能会过时,或者可能会使浏览和阅读速度变慢。(缓存频繁变化的数据时)
有没有子客户端缓存服务器端缓存?
两者都有,只不过客户端缓存嵌入在浏览器中,基本上是浏览器自动处理缓存。
客户端缓存可以有效降低服务器端负载。首先看一下HTTP头:Last-Modified和If-Modified-Since。简单来说,Last-Modified和If-Modified-Since是用来记录页面最后一次修改时间的HTTP头信息,但Last-Modified是从服务器发送到客户端的HTTP头,而If-Modified-Since是由客户端发送到服务器的头来实现的。
在浏览器中,您可以设置浏览器如何使用缓存。通常,默认为自动。操作步骤如下:
在较新版本的工具-》互联网选项-通用-设置-查看网页中,有四个选项控制缓存的使用。
当然,代码可以控制客户端缓存,例如下面的代码比您希望浏览器缓存的内容更可用。
禁用html客户端缓存
C#中禁止缓存的方法!
我对客户端缓存了解不多,我们写程序的时候也很少写客户端缓存。希望有人能提供更多关于客户端缓存的信息。
服务器端缓存包括系统。cahe和memcached。
当然,系统。Web.Caching.cahe是微软写的类,memcached是第三方插件。系统。Web.Caching.cache还不是分布式缓存,它只能在一台计算机上(07: 00),并且
Memcached是一个分布式缓存。
服务器缓存可以分为三种类型。
1.输出缓存:
要实现页面OutputCache,只需在页面中添加一条输出缓存指令。
<% @ output cache Duration=' 60 ' VaryByParam=' * % >
像其他页面指令一样,这个指令应该出现在ASPX页面的顶部,也就是说,在任何输出之前。它支持五个属性(或参数),其中两个是必需的。
持续时间
必需的属性。页面应该被缓存的时间,以秒为单位。必须是正整数。
位置
指定应该缓存输出的位置。如果要指定此参数,它必须是下列选项之一:Any、Client、Downstream、None、Server或ServerAndClient。
VaryByParam
必需的属性。请求中的变量名,它应该产生单独的缓存条目。“无”表示没有变化。“*”可用于为每个不同的变量数组创建新的缓存条目。使用“;”变量之间。分开。
瓦里比海德
根据指定标头中的更改更改缓存条目。
VaryByCustom
允许在global.asax中指定自定义变体(例如,“Browser”)。
2.剪辑缓存:
例子
% @ output cache duration=' 60 ' varybyparam=' * ' %此示例将缓存用户控件60秒,并且将为查询字符串的每次更改以及此控件所在的每个页面创建一个单独的缓存条目。%@ OutputCache持续时间='60' VaryByParam='无'
varybycontrol=' CategoryDropDownList ' %此示例将缓存用户控件60秒,并将为CategoryDropDownList控件的每个不同值以及该控件所在的每个页面创建一个单独的缓存项。% @ output cache Duration=' 60 ' VaryByParam=' none ' VaryByCustom=' browser '
Shared='true' %
最后,该示例将缓存用户控件60秒,并将为每个浏览器名称和主要版本创建一个缓存条目。然后,每个浏览器的缓存条目将被引用该用户控件的所有页面共享(只要所有页面都用相同的ID引用该控件)。
3.编程中使用最多的缓存:数据缓存。
系统。Web.Caching.cahe由httpRuntime实例化。缓存或HttpContext。Current.Cache HttpRuntime。缓存,HttpContext。Current.Cache是内置对象,所以希望与seesion相关联。
HttpContext之间的区别。Current.Cache和HttpRuntime。缓存:
HttpContext。获取当前HTTP请求的缓存对象。HttpRuntime。Cache:获取当前应用程序的缓存。HttpContext。Current.Cache称为HttpRuntime。缓存和HttpContext。web程序中使用Current.Cache,而HttpRuntime。任何程序都会用到缓存。在System.web命名空间下。
其实就是HttpContext。Current.Cache是通过HttpRuntime实现的。缓存,所以一般实例化最好通过HttpRuntime。缓存:
示例:system . web . caching . cache cache=httpruntime . cache
系统有许多方法。但是在方法中,add是一个缓存。
参数中存在缓存时间和依赖关系。
缓存时间到了,缓存到了指定的时间就失效,依赖关系变化了就失效。
依赖关系包括一般依赖关系CacheDependency和数据库依赖关系SqlCacheDependency。
虽然CacheDependency类完成了一个重要的功能,但是它的组成结构相对简单,主要包括两个属性和一个方法。
—属性“HasChanged”:确定CacheDependency对象是否发生了变化。
—属性“UTCLastModified”:返回最后一个依赖项的修改日期。
—方法“Dispose”:释放CacheDependency对象占用的资源。这个方法必须实现,因为cache类继承了接口“IDispose”。
缓存依赖
例如缓存。Insert("key ",myXMLFileData,DateTime。现在。添加分钟数(1),新
系统。Web.Caching.CacheDependency(服务器。MapPath(" users . XML ")));
Users.xml文件是一个相当普遍的依赖项。当xml文件发生更改时,此缓存将变得无效。
通常,SqlCacheDependency会添加到数据库中。这个设置需要在config中设置,并且应该启动数据库的这个服务。
缓存。可以将Insert设置为与数据库中的表相关联。一旦表发生变化,缓存就会失效。
你可以在网上查一下怎么用。