• 关于 状态缓存 的搜索结果

问题

mybatis缓存和hibernate缓存的理解问题和区别。类缓存和查询缓存的理解和区别

云栖技术 2019-12-01 19:41:23 1521 浏览量 回答数 1

回答

参考以下步骤,排查缓存命中率不高的原因。 CDN控制台统计的缓存命中率仅仅是CDN L1层的命中率,实际情况L2层的缓存数据也是从CDN节点获取,并不会从源站获取数据,所以真实的CDN命中率是略高于CDN控制台显示的命中率。 提示:CDN数据流向为客户端 > CDN的1级节点 > CDN的2级节点 > 源站。 查看用户提交的CDN加速域名流量情况,在加速域名流量不高的情况下,即便MISS状态的URL不多,但是对命中率的统计计算影响很大。例如,某CDN加速域名一共对外提供了10个可以访问的URL,其中有一个URL源站上设置了no-cache,导致不缓存,在其他URL访问都命中的情况下,命中率也仅有90%。 提示:CDN加速域名的流量带宽可以在CDN控制台获取。 在之前检查正常的情况下,有如下几种可能导致命中率低的情况,请逐一进行排查。 源站上缓存Header设置不当,或者缺少必要的Header,如果CDN的缓存规则是不缓存,那么每次访问都是MISS状态,影响命中率。 缓存Header设置不当,主要是Cache-Control或者Pragma配置,即源站上设置了Cache-Control为no-cache、no-store、max-age=0、private,或者Pragma设置为no-cache等情况下,均会被CDN当做最高优先级执行不缓存操作。 缺少必要的Header,指源站的Response头部信息中不包含Etag和Last-modified,这种情况也会导致不进行缓存。 CDN控制台设置了不缓存的规则,即某目录或者某种后缀的文件设置的缓存时间为0秒,相关信息可以在CDN控制台查看。 源站动态内容较多,目前CDN主要是加速静态资源,例如CSS、JS、HTML、图片、txt、视频等资源,针对动态资源PHP、JSP、包含内部逻辑处理甚至Cookie等资源都会回源数据。 CDN的加速URL中带有可变参数。例如URL地址为http://XXX.XXX.cn/1.txt?timestamp=14378923,其中timestamp值为时间戳,每次访问此值均不同。CDN针对第一次访问的URL,即之前未预热的URL,无论该URL是否符合CDN的缓存规则,由于节点上还没有这个文件,第一次访问肯定都是MISS状态。但是timestamp参数会变化,所以每次访问都是一个全新的URL,则每次都返回MISS状态,从而影响命中率。 刷新操作频繁。CDN控制台有定时刷新功能,每次刷新都会导致所有已经在CDN上缓存的URL失效,所以在刷新之后访问同样的URL时,就是MISS状态,从而影响命中率。 文件热度不够。不经常被用户访问到的URL,即使符合所有缓存规则,但是经常有被节点去除缓存的风险。CDN节点上缓存的文件,可以理解为按照热度属性采取末尾淘汰制,热度就是该文件在该节点上被访问的频率,文件热度不够,其实一定程度上跟这个域名本身的流量不高有关系,即第2步的原因。

保持可爱mmm 2020-03-30 14:57:13 0 浏览量 回答数 0

回答

参考以下步骤,排查缓存命中率不高的原因。 CDN控制台统计的缓存命中率仅仅是CDN L1层的命中率,实际情况L2层的缓存数据也是从CDN节点获取,并不会从源站获取数据,所以真实的CDN命中率是略高于CDN控制台显示的命中率。 提示:CDN数据流向为客户端 > CDN的1级节点 > CDN的2级节点 > 源站。 查看用户提交的CDN加速域名流量情况,在加速域名流量不高的情况下,即便MISS状态的URL不多,但是对命中率的统计计算影响很大。例如,某CDN加速域名一共对外提供了10个可以访问的URL,其中有一个URL源站上设置了no-cache,导致不缓存,在其他URL访问都命中的情况下,命中率也仅有90%。 提示:CDN加速域名的流量带宽可以在CDN控制台获取。 在之前检查正常的情况下,有如下几种可能导致命中率低的情况,请逐一进行排查。 源站上缓存Header设置不当,或者缺少必要的Header,如果CDN的缓存规则是不缓存,那么每次访问都是MISS状态,影响命中率。 缓存Header设置不当,主要是Cache-Control或者Pragma配置,即源站上设置了Cache-Control为no-cache、no-store、max-age=0、private,或者Pragma设置为no-cache等情况下,均会被CDN当做最高优先级执行不缓存操作。 缺少必要的Header,指源站的Response头部信息中不包含Etag和Last-modified,这种情况也会导致不进行缓存。 CDN控制台设置了不缓存的规则,即某目录或者某种后缀的文件设置的缓存时间为0秒,相关信息可以在CDN控制台查看。 源站动态内容较多,目前CDN主要是加速静态资源,例如CSS、JS、HTML、图片、txt、视频等资源,针对动态资源PHP、JSP、包含内部逻辑处理甚至Cookie等资源都会回源数据。 CDN的加速URL中带有可变参数。例如URL地址为http://XXX.XXX.cn/1.txt?timestamp=14378923,其中timestamp值为时间戳,每次访问此值均不同。CDN针对第一次访问的URL,即之前未预热的URL,无论该URL是否符合CDN的缓存规则,由于节点上还没有这个文件,第一次访问肯定都是MISS状态。但是timestamp参数会变化,所以每次访问都是一个全新的URL,则每次都返回MISS状态,从而影响命中率。 刷新操作频繁。CDN控制台有定时刷新功能,每次刷新都会导致所有已经在CDN上缓存的URL失效,所以在刷新之后访问同样的URL时,就是MISS状态,从而影响命中率。 文件热度不够。不经常被用户访问到的URL,即使符合所有缓存规则,但是经常有被节点去除缓存的风险。CDN节点上缓存的文件,可以理解为按照热度属性采取末尾淘汰制,热度就是该文件在该节点上被访问的频率,文件热度不够,其实一定程度上跟这个域名本身的流量不高有关系,即第2步的原因。

保持可爱mmm 2020-03-30 15:29:26 0 浏览量 回答数 0

新用户福利专场,云服务器ECS低至102元/年

新用户专场,1核2G 102元/年起,2核4G 699.8元/年起

回答

1、绝大部分的登录长连接,都需要客户端和服务器配合实现2、微信基于Web浏览器的登录长连接,应该是使用Cookie,如果不允许,应该会换成URl参数,实现客户端身份唯一标识3、服务器在每次用户提交请求的时候,服务器解析参数,服务器端缓存查询对应的登录标志,判断登录状态。4、微信扫码登录也是类似原理,二维码带有标识,微信app扫码以后,页面跳转已经会有对应的判断和登录信息缓存5、App端也会记录一些信息,比如例如内置浏览器实现部分身份状态标识的缓存,原生App也可以使用内置缓存变量或者临时文件记录实现。

徐雷frank 2019-12-02 01:46:58 0 浏览量 回答数 0

回答

网站静态化,并不一定非要靠写代码实现整站 HTML 的生成,有些工具能提供非常好的缓存机制。在 Web 开发中,最关键的瓶颈往往在于数据库,减少数据库的读写压力,就是缓存的主要作用。在可以提供缓存功能的工具中,应用层的可以用 Memcache 和 Redis,前端缓存可以用 Varnish 和 Nginx 的提供的缓存功能,当然还要合理利用 304 状态码。以 Memcache 和 Redis 为例,它们的作用是让你能够把数据库的数据保存在内存或者是磁盘文件上,这样每次请求过来你仍然可以通过程序来控制业务逻辑,但是极大地减少了数据库的访问,性能自然提升。而对于 Varnish 和 Nginx 这样具有反向代理功能的工具来说,它们的作用就是将第一次动态请求的页面缓存起来,在过期时间内,接下来的请求返回的都是缓存里的数据,不再向后端服务器发起请求。而对于你后面的问题,阅读次数,评论这些静态中常变的部分,使用不同工具的情况下也有不同的解决方法。文章的阅读次数 —— 使用应用层缓存的情况下,可以先把阅读次数写入到缓存中,在后台写个脚本定期从缓存中读出来写入到数据库里。使用前端缓存的情况,可以用 Ajax 异步调用把阅读次数写入到数据库中,如果写压力大的话,就像使用应用层缓存一样,先写入缓存,再写脚本定期读。

落地花开啦 2019-12-02 02:50:32 0 浏览量 回答数 0

回答

memcache很快的!生成缓存的时间要20~30秒吗?手动生成吗? 按需缓存吧! ######回复 @张健龙 : 让程序自动去生成缓存,取的时候先去缓存拿,拿不到就读数据库,同时生成缓存,后面的查询就能直接拿缓存里的了。于是系统会越跑越快。当然,先手工把缓存全装进去也行。看是什么场合吧,场合你又没说...######呃,我说的可能有些夸张了,但确实有这样的情况存在,如果在生成缓存的过程中,这些请求都去查询数据库,有没有更好的解决办法?######另外做脚本定时生成缓存数据,正常优先使用缓存数据###### 你与其考虑当“生成缓存的时间要20~30秒”时怎么处理 不如想想如何减少生成缓存的时间 20~30秒肯定是一种不正常的状态 把问题找出来,解决它 ######要进行预热,预热后,缓存建立完后,再上线。

爱吃鱼的程序员 2020-06-05 13:17:49 0 浏览量 回答数 0

回答

1、HTTP请求(Request)报文,报文格式为:请求行 – HTTP头(通用信息头,请求头,实体头) – 请求报文主体(只有POST才有报文主体),如下图 HTTP响应(Response)报文,报文格式为:状态行 – HTTP头(通用信息头,响应头,实体头) – 响应报文主体,如下图 注:通用信息头指的是请求和响应报文都支持的头域, 分别为Cache-Control、Connection、Date、Pragma、Transfer-Encoding、Upgrade、Via;实体头则是实体信息的实体头域,分别为Allow、Content-Base、Content-Encoding、Content-Language、Content-Length、Content-Location、Content-MD5、Content-Range、Content-Type、Etag、Expires、Last-Modified、extension-header。这里只是为了方便理解,将通用信息头,响应头/请求头,实体头都归为了HTTP头。 二、缓存过程分析 浏览器与服务器通信的方式为应答模式,即是:浏览器发起HTTP请求 – 服务器响应该请求。那么浏览器第一次向服务器发起该请求后拿到请求结果,会根据响应报文中HTTP头的缓存标识,决定是否缓存结果,是则将请求结果和缓存标识存入浏览器缓存中,简单的过程如下图: 由上图我们可以知道 1、浏览器每次发起请求,都会先在浏览器缓存中查找该请求的结果以及缓存标识 2、浏览器每次拿到返回的请求结果都会将该结果和缓存标识存入浏览器缓存中 以上两点结论就是浏览器缓存机制的关键,他确保了每个请求的缓存存入与读取,只要我们再理解浏览器缓存的使用规则,那么所有的问题就迎刃而解了,本文也将围绕着这点进行详细分析。 为了方便大家理解,这里我们根据是否需要向服务器重新发起HTTP请求将缓存过程分为两个部分,分别是强制缓存和协商缓存 。 2.1强制缓存 强制缓存就是向浏览器缓存查找该请求结果,并根据该结果的缓存规则来决定是否使用该缓存结果的过程,强制缓存的情况主要有三种(暂不分析协商缓存过程),如下: (1)不存在该缓存结果和缓存标识,强制缓存失效,则直接向服务器发起请求(跟第一次发起请求一致),如下图: (2)存在该缓存结果和缓存标识,但是结果已经失效,强制缓存失效,则使用协商缓存(暂不分析),如下图 (3)存在该缓存结果和缓存标识,且该结果没有还没有失效,强制缓存生效,直接返回该结果,如下图: 那么强制缓存的缓存规则是什么? 答:当浏览器向服务器发送请求的时候,服务器会将缓存规则放入HTTP响应的报文的HTTP头中和请求结果一起返回给浏览器,控制强制缓存的字段分别是Expires和Cache-Control,其中Cache-Conctrol的优先级比Expires高。 2.1.1Expires Expires是HTTP/1.0控制网页缓存的字段,其值为服务器返回该请求的结果缓存的到期时间,即再次发送请求时,如果客户端的时间小于Expires的值时,直接使用缓存结果。 Expires是HTTP/1.0的字段,但是现在浏览器的默认使用的是HTTP/1.1,那么在HTTP/1.1中网页缓存还是否由Expires控制? 到了HTTP/1.1,Expires已经被Cache-Control替代,原因在于Expires控制缓存的原理是使用客户端的时间与服务端返回的时间做对比,如果客户端与服务端的时间由于某些原因(时区不同;客户端和服务端有一方的时间不准确)发生误差,那么强制缓存直接失效,那么强制缓存存在的意义就毫无意义。、 那么Cache-Control又是如何进行控制的? 2.1.2Cache-Control 在HTTP/1.1中,Cache-Control是最重要的规则,主要用于控制网页缓存,主要取值为: (1)public:所有内容都将被缓存(客户端和代理服务器都可缓存) (2)private:所有内容只有客户端可以缓存,Cache-Control的默认取值 (3)no-cache:客户端缓存内容,但是是否使用缓存则需要经过协商缓存来验证决定 (4)no-store:所有内容都不会被缓存,即不使用强制缓存,也不使用协商缓存 (5)max-age=xxx (xxx is numeric):缓存内容将在xxx秒后失效 接下来,我们直接看一个例子,如下: 由上面的例子我们可以知道: (1)HTTP响应报文中expires的时间值,是一个绝对值 (2)HTTP响应报文中Cache-Control为max-age=600,是相对值 由于Cache-Control的优先级比expires,那么直接根据Cache-Control的值进行缓存,意思就是说在600秒内再次发起该请求,则会直接使用缓存结果,强制缓存生效。 注:在无法确定客户端的时间是否与服务端的时间同步的情况下,Cache-Control相比于expires是更好的选择,所以同时存在时,只有Cache-Control生效。 了解强制缓存的过程后,我们拓展性的思考一下: 浏览器的缓存存放在哪里,如何在浏览器中判断强制缓存是否生效? 这里我们以博客的请求为例,状态码为灰色的请求则代表使用了强制缓存,请求对应的Size值则代表该缓存存放的位置,分别为from memory cache 和 from disk cache。 那么from memory cache 和 from disk cache又分别代表的是什么呢?什么时候会使用from disk cache,什么时候会使用from memory cache呢? from memory cache代表使用内存中的缓存,from disk cache则代表使用的是硬盘中的缓存,浏览器读取缓存的顺序为memory –> disk。 虽然我已经直接把结论说出来了,但是相信有不少人对此不能理解,那么接下来我们一起详细分析一下缓存读取问题,这里仍让以我的博客为例进行分析: 访问https://heyingye.github.io/ –> 200 –> 关闭博客的标签页 –> 重新打开https://heyingye.github.io/ –> 200(from disk cache) –> 刷新 –> 200(from memory cache) 过程如下: (1)访问博客网站 (2)关闭博客的标签页 (3)重新打开博客 (4)刷新 看到这里可能有人小伙伴问了,最后一个步骤刷新的时候,不是同时存在着from disk cache和from memory cache吗? 对于这个问题,我们需要了解内存缓存(from memory cache)和硬盘缓存(from disk cache),如下: (1)内存缓存(from memory cache):内存缓存具有两个特点,分别是快速读取和时效性: 1、快速读取:内存缓存会将编译解析后的文件,直接存入该进程的内存中,占据该进程一定的内存资源,以方便下次运行使用时的快速读取。 2、时效性:一旦该进程关闭,则该进程的内存则会清空。 (2)硬盘缓存(from disk cache):硬盘缓存则是直接将缓存写入硬盘文件中,读取缓存需要对该缓存存放的硬盘文件进行I/O操作,然后重新解析该缓存内容,读取复杂,速度比内存缓存慢。 在浏览器中,浏览器会在js和图片等文件解析执行后直接存入内存缓存中,那么当刷新页面时只需直接从内存缓存中读取(from memory cache);而css文件则会存入硬盘文件中,所以每次渲染页面都需要从硬盘读取缓存(from disk cache)。 2.2协商缓存 协商缓存就是强制缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器根据缓存标识决定是否使用缓存的过程,主要有以下两种情况: (1)协商缓存生效,返回304,如下 (2)协商缓存失败,返回200和请求结果,如下 同样,协商缓存的标识也是在响应报文的HTTP头中和请求结果一起返回给浏览器的,控制协商缓存的字段分别有:Last-Modified / If-Modified-Since和Etag / If-None-Match,其中Etag / If-None-Match的优先级比Last-Modified / If-Modified-Since高。 2.2.1Last-Modified / If-Modified-Since (1)Last-Modified是服务器响应请求时,返回该资源文件在服务器最后被修改的时间,如下: (2)If-Modified-Since则是客户端再次发起该请求时,携带上次请求返回的Last-Modified值,通过此字段值告诉服务器该资源上次请求返回的最后被修改时间。服务器收到该请求,发现请求头含有If-Modified-Since字段,则会根据If-Modified-Since的字段值与该资源在服务器的最后被修改时间做对比,若服务器的资源最后被修改时间大于If-Modified-Since的字段值,则重新返回资源,状态码为200;否则则返回304,代表资源无更新,可继续使用缓存文件,如下。 2.2.2Etag / If-None-Match (1)Etag是服务器响应请求时,返回当前资源文件的一个唯一标识(由服务器生成),如下: (2)If-None-Match是客户端再次发起该请求时,携带上次请求返回的唯一标识Etag值,通过此字段值告诉服务器该资源上次请求返回的唯一标识值。服务器收到该请求后,发现该请求头中含有If-None-Match,则会根据If-None-Match的字段值与该资源在服务器的Etag值做对比,一致则返回304,代表资源无更新,继续使用缓存文件;不一致则重新返回资源文件,状态码为200,如下。 注:Etag / If-None-Match优先级高于Last-Modified / If-Modified-Since,同时存在则只有Etag / If-None-Match生效。 三、总结 强制缓存优先于协商缓存进行,若强制缓存(Expires和Cache-Control)生效则直接使用缓存,若不生效则进行协商缓存(Last-Modified / If-Modified-Since和Etag / If-None-Match),协商缓存由服务器决定是否使用缓存,若协商缓存失效,那么代表该请求的缓存失效,重新获取请求结果,再存入浏览器缓存中;生效则返回304,继续使用缓存,主要过程如下: 以上便是浏览器缓存的过程

景凌凯 2020-04-04 13:11:54 0 浏览量 回答数 0

回答

客户端第一次向服务器成功发送请求,服务器会把内容返回给客户端,状态码是200,且会标记内容修改时间,生成一个ETag标记,用来核实内容是否修改过。等下次同一客户端再次发送请求,会根据请求标记的修改时间,通过ETag标记判断文件内容在这期间是否修改过。如果没有修改过,则返回304状态码。客户端直接加载缓存内容,如果文件内容修改过则把最新内容返回给客户端,并返回最新文件修改时间和ETag。返回304状态码示例如下。 浏览器客户端第一次访问一个图片,请求成功,服务器返回200状态码,Response Header响应包里会包含Last-Modified最近修改时间和ETag。 当客户端再次访问时,会在请求头中加上之前读取内容的修改时间和ETag,如下图所示,服务器会根据ETag和Last-modified判断内容最近有没有修改过。如果没有修改,则返回304状态码,如果修改过,则把最新内容返回客户端,状态码则是200。 所以有时候服务器相关日志文件、CDN日志文件和OSS日志文件都会有304状态码,这属于正常情况,说明缓存中已经存在这些内容,并且在此期间中这些内容并没有修改,如果想更新缓存,可以按 Ctrl + F5 键,客户端会清除缓存,重新向服务器发送请求,服务器则返回请求内容,并且状态码是200。

保持可爱mmm 2020-03-30 14:56:06 0 浏览量 回答数 0

问题

可授权CDN Action?

青衫无名 2019-12-01 22:03:34 1427 浏览量 回答数 0

回答

准确的说设备影子是设备的最新状态在服务器上的缓存,影子跟MNS是没有关系的。我来描述下您提问的场景1、影子获取到设备的最新状态d的流程是:设备上报的存储在OTS里,然后 影子通过POP来读取2、设备影子存储的是设备的一份缓存,没有放到MNS里面,如果您需要的设备状态的时序数据的话,影子就不满足您的需求。

iot小能手 2019-12-02 01:45:45 0 浏览量 回答数 0

回答

答案:keep-alive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染。 解析: 用法也很简单: <keep-alive> <component> <!-- 该组件将被缓存! --> </component> </keep-alive> props _ include - 字符串或正则表达,只有匹配的组件会被缓存 _ exclude - 字符串或正则表达式,任何匹配的组件都不会被缓存 // 组件 a export default { name: "a", data() { return {}; } }; <keep-alive include="a"> <component> <!-- name 为 a 的组件将被缓存! --> </component> </keep-alive >可以保留它的状态或避免重新渲染 <keep-alive exclude="a"> <component> <!-- 除了 name 为 a 的组件都将被缓存! --> </component> </keep-alive >可以保留它的状态或避免重新渲染 如果只想 router-view 里面某个组件被缓存,怎么办? 增加 router.meta 属性 // routes 配置 export default [ { path: "/", name: "home", component: Home, meta: { keepAlive: true // 需要被缓存 } }, { path: "/:id", name: "edit", component: Edit, meta: { keepAlive: false // 不需要被缓存 } } ]; <keep-alive> <router-view v-if="$route.meta.keepAlive"> <!-- 这里是会被缓存的视图组件,比如 Home! --> </router-view> </keep-alive> <router-view v-if="!$route.meta.keepAlive"> <!-- 这里是不被缓存的视图组件,比如 Edit! --> </router-view>

问问小秘 2019-12-02 03:21:06 0 浏览量 回答数 0

问题

函数返回后,执行环境也会随之释放吗?我能复用上一次调用缓存的资源/状态吗?

1934890530796658 2020-03-27 18:38:30 1 浏览量 回答数 1

问题

社交类APP如何显示在线状态?

蛮大人123 2019-12-01 20:02:17 1790 浏览量 回答数 1

回答

云存储网关需要配置本地缓存,用于暂存上传数据。对于云存储文件网关缓存设置有建议的计算公式,参见使用须知。 在实际使用中,初期由于对使用场景和文件容量估算不准确,造成对云存储网关的本地缓存容量设置偏小。随着应用负载增加,缓存容量无法满足负载,会出现需要对缓存盘扩容的情况。目前云存储网关的缓存盘暂时不支持在线的热扩容,需要手动配置。下面分别以云控制台和网关控制台为例介绍如何手动升级网关缓存。 扩容前的检查 由于扩容的时候需要临时解绑文件系统,所以需要保证在操作过程中没有IO写入,需要保证所有的NFS/SMB客户端的读写都已经停止。同时在所有的客户端上解除对云存储网关的挂载,并且等待文件网关的共享详情页面的缓存状态为“同步完成”,具体见下图。 云控制台: 4 网关控制台: 5 2.删除需要扩容的共享 记录下当前的云存储网关的配置(bucket/共享名/访问控制列表/高级选项),然后从云控制台或者网关控制台上删除对应的共享。此时缓存盘不会被直接释放,只是解除了本地缓存和OSS存储桶之间的绑定关系。由于缓存是同步完成状态,此时所有的数据已经都上传到OSS存储桶,删除共享不会造成数据丢失。 3.缓存物理扩容 当使用在阿里云的云存储网关版本是,可以在云控制台对现有的缓存进行扩容操作,具体的网页参考如下。 6 点击“扩展缓存”按钮以后,会弹出下列窗口 7 此时输入计算好的新的容量,就可以进行扩容,注意扩容的最小单位为1GB。点击确定后,会需要对新增容量做一次付费操作,完成购买操作后物理扩容会自动完成,在云控制台上会看到扩容后的物理容量。 当使用线下的云存储网关是,缓存的物理扩容需要在对应的vsphere/VHD/KVM的管理界面上进行操作,请参考对应的软件的操作手册。 4.重建共享 按照之前的共享名和配置重建共享,在重建过程时选择之前物理扩容的数据盘。此时新的共享就会显示新的缓存容量,参见创建共享链接(云控制台或者网关控制台)。

1934890530796658 2020-03-31 11:52:39 0 浏览量 回答数 0

回答

浏览器的缓存机制指的是通过在一段时间内保留已接收到的 web 资源的一个副本,如果在资源的有效时间内,发起了对这个资源的再一次请求,那么浏览器会直接使用缓存的副本,而不是向服务器发起请求。使用 web 缓存可以有效地提高页面的打开速度,减少不必要的网络带宽的消耗。 web 资源的缓存策略一般由服务器来指定,可以分为两种,分别是强缓存策略和协商缓存策略。 使用强缓存策略时,如果缓存资源有效,则直接使用缓存资源,不必再向服务器发起请求。强缓存策略可以通过两种方式来设置,分别是 http 头信息中的 Expires 属性和 Cache-Control 属性。 服务器通过在响应头中添加 Expires 属性,来指定资源的过期时间。在过期时间以内,该资源可以被缓存使用,不必再向服务器发送请求。这个时间是一个绝对时间,它是服务器的时间,因此可能存在这样的问题,就是客户端的时间和服务器端的时间不一致,或者用户可以对客户端时间进行修改的情况,这样就可能会影响缓存命中的结果。 Expires 是 http1.0 中的方式,因为它的一些缺点,在 http 1.1 中提出了一个新的头部属性就是 Cache-Control 属性, 它提供了对资源的缓存的更精确的控制。它有很多不同的值,常用的比如我们可以通过设置 max-age 来指定资源能够被缓存的时间 的大小,这是一个相对的时间,它会根据这个时间的大小和资源第一次请求时的时间来计算出资源过期的时间,因此相对于 Expires 来说,这种方式更加有效一些。常用的还有比如 private ,用来规定资源只能被客户端缓存,不能够代理服务器所缓存。还有如 n o-store ,用来指定资源不能够被缓存,no-cache 代表该资源能够被缓存,但是立即失效,每次都需要向服务器发起请求。 一般来说只需要设置其中一种方式就可以实现强缓存策略,当两种方式一起使用时,Cache-Control 的优先级要高于 Expires 。 使用协商缓存策略时,会先向服务器发送一个请求,如果资源没有发生修改,则返回一个 304 状态,让浏览器使用本地的缓存副本。 如果资源发生了修改,则返回修改后的资源。协商缓存也可以通过两种方式来设置,分别是 http 头信息中的 Etag 和 Last-Modified 属性。 服务器通过在响应头中添加 Last-Modified 属性来指出资源最后一次修改的时间,当浏览器下一次发起请求时,会在请求头中添加一个 If-Modified-Since 的属性,属性值为上一次资源返回时的 Last-Modified 的值。当请求发送到服务器后服务器会通过这个属性来和资源的最后一次的修改时间来进行比较,以此来判断资源是否做了修改。如果资源没有修改,那么返回 304 状态,让客户端使用本地的缓存。如果资源已经被修改了,则返回修改后的资源。使用这种方法有一个缺点,就是 Last-Modified 标注的最后修改时间只能精确到秒级,如果某些文件在1秒钟以内,被修改多次的话,那么文件已将改变了但是 Last-Modified 却没有改变, 这样会造成缓存命中的不准确。 因为 Last-Modified 的这种可能发生的不准确性,http 中提供了另外一种方式,那就是 Etag 属性。服务器在返回资源的时候,在头信息中添加了 Etag 属性,这个属性是资源生成的唯一标识符,当资源发生改变的时候,这个值也会发生改变。在下一次资源请求时,浏览器会在请求头中添加一个 If-None-Match 属性,这个属性的值就是上次返回的资源的 Etag 的值。服务接收到请求后会根据这个值来和资源当前的 Etag 的值来进行比较,以此来判断资源是否发生改变,是否需要返回资源。通过这种方式,比 Last-Modified 的方式更加精确。 当 Last-Modified 和 Etag 属性同时出现的时候,Etag 的优先级更高。使用协商缓存的时候,服务器需要考虑负载平衡的问题,因此多个服务器上资源的 Last-Modified 应该保持一致,因为每个服务器上 Etag 的值都不一样,因此在考虑负载平衡时,最好不要设置 Etag 属性。 强缓存策略和协商缓存策略在缓存命中时都会直接使用本地的缓存副本,区别只在于协商缓存会向服务器发送一次请求。它们缓存不命中时,都会向服务器发送请求来获取资源。在实际的缓存机制中,强缓存策略和协商缓存策略是一起合作使用的。浏览器首先会根据请求的信息判断,强缓存是否命中,如果命中则直接使用资源。如果不命中则根据头信息向服务器发起请求,使用协商缓存,如果协商缓存命中的话,则服务器不返回资源,浏览器直接使用本地资源的副本,如果协商缓存不命中,则浏览器返回最新的资源给浏览器。

剑曼红尘 2020-04-03 17:48:49 0 浏览量 回答数 0

回答

主要是要有一个分布式存储来记录 IP 地址、用户、登陆次数的关系,可以使用分布式缓存来做(memcache 或者 redis)。浏览器关闭和 APP 强退的话,除非做长连接,否则服务端没法感知,但是长连接是非常消耗服务端资源的,不推荐做这么复杂,建议简单一点就用缓存超时来控制。比如浏览器或者 APP 每分钟向服务端上报一次登录状态,服务端刷新缓存,如果超出指定时间浏览器或者 APP 没有上报,那么缓存自动失效,可以实现下一次用户再登录的时候重新计数。

lowei 2019-12-02 00:50:10 0 浏览量 回答数 0

回答

如果这个信息不涵盖 权限交互之类的设定 是可以直接放到View那边去的 但是普遍的做法是 Get一次数据 然后缓存下来 然后View那边取缓存过去就好了 每次都去Get浪费资源 事实上 只有在做增删改的时候 get数据 做更新缓存 其他时候都是读取缓存   ######嗯。。我也觉得只要这写数据和逻辑处理关系不大,比如友情链接,登录状态等。###### smarty是可以做的。 另外,顶楼上~

kun坤 2020-06-07 17:00:56 0 浏览量 回答数 0

回答

用户将openid与业务帐号绑定一次,如何实现用户一直处于登录状态?更换手机后?方法1:将微信号认证一下,使用OAuth接口,每次进入之前通过接口获取到用户的openid,然后再从你的数据库去读取关系,写入用户登录状态。方法2:用户点击菜单或者发送关键词是可以获取到用户的openid的,此时返回一个链接或图文消息,用户点击之后用get方式获取到openid,然后再从你的数据库去读取关系,写入用户登录状态。商业产品正式使用推荐方法1。个人做着玩玩的话推荐方法2。用于网页授权用户信息的access_token是怎么缓存和维护的?存储在seesion吗?用于网页授权用户信息的access_token是必须要进行缓存的,这个每日有接口频率限制,所以你必须缓存这个。存在Memcache或redis等缓存服务,或者……你存到某个文件也行。session一般是用来做用户会话,放到这里不保证可用,或者说这么做很奇怪。其他朋友补充下吧。微信中session会话什么时候会失效?(比如PC端关闭浏览器)微信的session和PC没关系啊。。session什么时候过期这个说不来,和你服务器设置和微信自己都有关系吧我觉得。cookie的话微信有一种很奇怪的过期方式,在很久以前的旧版本里很无厘头,经常是关了窗口就关了。

蛮大人123 2019-12-02 02:02:25 0 浏览量 回答数 0

问题

该来的终于来了:“第一起”基于 IPv6 的 DDoS 攻击

驻云科技 2019-12-01 21:44:35 4186 浏览量 回答数 1

问题

有关缓存与登录问题

落地花开啦 2019-12-01 20:02:15 755 浏览量 回答数 1

回答

通过 URI 进行资源标识:资源由其 URI(通常是 Internet 上的链接)标识。因此,客户端可以使用资源的 URI 直接访问 RESTful Web 服务(与将网站地址放在浏览器的地址栏中并获取一些表示形式作为响应一样)。 统一接口:使用一组固定的四个创建、读取、更新、删除操作:PUT、GET、POST 和 DELETE 来操作资源。 客户端服务器:明显的分离问题是此约束背后的原因。在客户端和服务器之间分离问题有助于提高客户端的可移植性和服务器组件的可伸缩性。 无状态:从客户端到服务器的每个请求都必须包含理解请求所需的所有信息,并且不能利用服务器上的任何存储上下文。 缓存:为了提高网络效率,响应必须能够标记为可缓存或不可缓存。 命名资源– 系统由使用 URL 命名的资源组成。 互连的资源表示- 资源表示使用 URL 互连,从而使客户端能够从一种状态前进到另一个状态。 分层组件– 代理服务器、缓存服务器、网关等中介可以在客户端和资源之间插入,以支持性能、安全性等。 自我描述性消息:资源与其表示形式分离,以便以各种格式访问其内容,如 HTML、XML、纯文本、PDF、JPEG、JSON 等。

YDYK 2020-04-25 14:34:35 0 浏览量 回答数 0

回答

你好,钉钉的h5容器支持缓存和离线包。状态码两百和走不走离线或缓存没有关系。 ------------------------- 你好,这个情况应该是你那边的max-age=0,我们对不大于0的没有做缓存。多谢你的建议,这个后续我们会考虑优化。

识器 2019-12-02 01:36:30 0 浏览量 回答数 0

问题

如何使用状态作为缓存

社区小助手 2019-12-01 19:25:19 363 浏览量 回答数 1

回答

使用缓存+中间件的目的主要是为了提升下单接口的吞吐能力,至于怎么解决的我们分析下流程,有什么问题在交流不对的地方指正一下。商品详情页-购买-订单确认页(此时还没有生产订单只是商品数据可来自缓存)-提交订单(执行2-7逻辑)-支付页缓存中预热的(提前从数据库中把数据放入缓存)是要参加秒杀商品信息(包括库存数量),并对商品设置过期时间,这个时间应该是秒杀商品的结束时间,这么做主要是缓解数据库压力提升响应速度。并发秒杀(提交订单)时候先从缓存中查询是否有此商品,没有说明秒杀结束了,有的话去预扣商品的库存数量。如果预扣成功说明库存充足可以下单,响应给前端一个状态,并去发消息到消息中间件,订单服务去消费此消息然后开始真正的数据库库存扣减,扣减成功开始生成订单并入库。异步解耦订单生成逻辑提升下单接口吞吐量。前端订单确认页面可以去轮询查询订单生成结果,一般有三种结果:生成订单失败既秒杀失败或者还未消费到消息(排队中)如果成功则去支付页面。这里的异步生成订单不存在分布式事务问题,因为预扣库存仅仅是去缓存中扣减库存数量,如果此时失败并不会发送消息,如果成功那么消息也应该被消费。由于采用是轮询结果的方式所以即便订单生成失败用户重新下单即可并不是必须要保证最终一致的场景。订单成功后是从数据库获取的订单信息缓存中并没有。

1355667359866028 2019-12-02 00:40:59 0 浏览量 回答数 0

回答

nginx反代在网站上使用,一般是为了做负载。就缓存上来讲,在代理单位的存储上保存请求目标的内容,加快响应速度,减少应用单位上的资源开销,比如多客户端请求相同的资源,代理缓存命中后,对于应用服务器来说,只发生了一次资源调度。 而web服务器上的缓存配置,一般来说是用来减少本地IO的,请求目标的内容会存放在客户端本地。 比如web设置了内容过期的timespan(max-age=31536000或者Expires:,这样的header,注意Expires头是http1.0的东西,如果客户端支持1.1只用写Cache-Control: max-age就可以了,这些可以翻阅RFC文档再配合各浏览器厂商来决定),那下一次请求如果没有内容没过期,浏览器是不会发起任何请求的,直接读取本地的缓存数据; 而内容过期后,浏览器会发起请求,如果web端给设置过LastModified或者是Etag,请求的时候就会带上这些特征,用于web服务器对资源进行比对,如果内容没有发生变化,那么就会告诉你304状态,浏览器还是读取缓存数据。

a123456678 2019-12-02 02:58:06 0 浏览量 回答数 0

回答

nginx反代在网站上使用,一般是为了做负载。就缓存上来讲,在代理单位的存储上保存请求目标的内容,加快响应速度,减少应用单位上的资源开销,比如多客户端请求相同的资源,代理缓存命中后,对于应用服务器来说,只发生了一次资源调度。 而web服务器上的缓存配置,一般来说是用来减少本地IO的,请求目标的内容会存放在客户端本地。 比如web设置了内容过期的timespan(max-age=31536000或者Expires:,这样的header,注意Expires头是http1.0的东西,如果客户端支持1.1只用写Cache-Control: max-age就可以了,这些可以翻阅RFC文档再配合各浏览器厂商来决定),那下一次请求如果没有内容没过期,浏览器是不会发起任何请求的,直接读取本地的缓存数据; 而内容过期后,浏览器会发起请求,如果web端给设置过LastModified或者是Etag,请求的时候就会带上这些特征,用于web服务器对资源进行比对,如果内容没有发生变化,那么就会告诉你304状态,浏览器还是读取缓存数据。

西秦说云 2019-12-02 01:33:24 0 浏览量 回答数 0

问题

为 WordPress 开启 LS-Cache 缓存

妙正灰 2019-12-01 21:51:04 4191 浏览量 回答数 0

回答

应该把 ifModified: true 去掉。仔细看一下你参考的文章:当你请求的资源并不是一层不变的时候,即不能简单的一直使用客户端缓存时,你可能通过将cache设置为false来发送请求,这实际上是在url加上时间戳组合成新的url,每次发送新的请求,这明显加大了服务器的压力。对于这种情况,我们可以通过ifModified参数改进缓存方式(即:cache和ifModified都设置为true),……他针对的是资源变动比较频繁的情况,希望时刻获取最新的文件,而你应该是想要尽量使用缓存吧。正常情况下如果接收到 304,浏览器会主动把缓存内容和状态 200 返回给 xhr 对象,一旦设置了 ifModified: true,从第二次请求开始,就没有了浏览器的处理过程,jQuery 直接接收到一个 304 和空内容。另外 contentType: 'application/json' 也用得不正确,一般情况下不用设置这个值。

云栖技术 2019-12-02 02:20:28 0 浏览量 回答数 0

回答

应该把 ifModified: true 去掉。仔细看一下你参考的文章:当你请求的资源并不是一层不变的时候,即不能简单的一直使用客户端缓存时,你可能通过将cache设置为false来发送请求,这实际上是在url加上时间戳组合成新的url,每次发送新的请求,这明显加大了服务器的压力。对于这种情况,我们可以通过ifModified参数改进缓存方式(即:cache和ifModified都设置为true),……他针对的是资源变动比较频繁的情况,希望时刻获取最新的文件,而你应该是想要尽量使用缓存吧。正常情况下如果接收到 304,浏览器会主动把缓存内容和状态 200 返回给 xhr 对象,一旦设置了 ifModified: true,从第二次请求开始,就没有了浏览器的处理过程,jQuery 直接接收到一个 304 和空内容。另外 contentType: 'application/json' 也用得不正确,一般情况下不用设置这个值。

a123456678 2019-12-02 03:15:45 0 浏览量 回答数 0

问题

内存占用怎么突然变成97%左右了呢?求指导。。

lipan800538 2019-12-01 21:32:56 10794 浏览量 回答数 4
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 SSL证书 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 2020中国云原生 阿里云云栖号