精华内容
下载资源
问答
  • 完全关联缓存(FAC),设置关联的缓存(SAC)(4种方式),设置关联的缓存(2种方式),使用赋予内存访问权限运行它们,并报告缓存的命中和未命中次数。 DMC ___命中____命中FAC ___命中____命中SAC 4种方法___...
  • 7.2 缓存命中未命中

    千次阅读 2017-10-22 19:11:20
    缓存命中(cache hit):可以用已有的副本为某些到达缓存的请求提供服务。 缓存命中(cache miss):其他一些到达缓存的请求可能会由于没有副本可用,而被转发给原始服务器。 1. 再验证 HTTP 再验证 (revalidation):...
    • 缓存很有帮助,但缓存无法保存世界上每份文档的副本,即便可以保持也不能进行及时的更新。
    • 缓存命中(cache hit):可以用已有的副本为某些到达缓存的请求提供服务。
    • 缓存未命中(cache miss):其他一些到达缓存的请求可能会由于没有副本可用,而被转发给原始服务器。
      这里写图片描述

    1. 再验证

    • HTTP 再验证 (revalidation):原始服务器的内容可能会发生变化,缓存要不时对其进行检测,看看它们保存的副本是否仍是服务器上最新的副本,进行“新鲜度检测”。
    • 缓存可以在任意时刻,以任意的频率对副本进行再验证。但由于缓存中通常会包含数百万的文档,而且网络带宽是很珍贵的,所以大部分缓存只有在客户端发起请求,并且副本旧得足以需要检测的时候,才会对副本进行再验证。
    • 为了有效地进行再验证,HTTP 定义了一些特殊的请求,不用从服务器上获取整个对象,就可以快速检测出内容是否是最新的。
    • HTTP 为我们提供了几个用来对已缓存对象进行再验证的工具,但最常用的是 If- Modified-Since 首部。将这个首部添加到 GET 请求中去,就可以告诉服务器,只有在缓存了对象的副本之后,又对其进行了修改的情况下,才发送此对象。
    • 服务器收到 GET If-Modified-Since 请求时的 3 种情况:
      • 再验证命中(revalidate hit)或缓慢命中(slow hit):
        如果服务器对象未被修改,服务器会向客户端发送一个小的 HTTP 304 Not Modified 响应。只要缓存知道副本仍然有效,就会再次将副本标识为暂时新鲜的,并将副本提供给客户端。
      • 再验证未命中 :
        如果服务器对象与已缓存副本不同,服务器向客户端发送一条普通的、带有完整内容的 HTTP 200 OK 响应。
      • 对象被删除:
        如果服务器对象已经被删除了,服务器就回送一个 404 Not Found 响应,缓存也会将其副本删除。
        这里写图片描述
    • 再验证命中要与原始服务器进行核对,所以会比单纯的缓存命中要慢,但它没有从服务器中获取对象数据,所以要比缓存未命中快一些。
    • 再验证未命中几乎和缓存未命中速度一样。
      这里写图片描述

    2. 缓存命中率

    • 缓存命中率(cache hit rate,或称为缓存命中比例):由缓存提供服务的请求所占的比例。有时也被称为文档命中率(document hit rate)。
    • 命中率在 0 到 1 之间, 但通常是用百分数来描述的,0% 表示每次请求都未命中(要通过网络来获取文 档),100% 表示每次请求都命中了(在缓存中有一份副本)。有时,人们会在命中率中包括再验证命中,但有时候命中率和再验证命中率是分别测量的。在检测命中率的时候,要确定自己知道什么才是“命中”。
    • 缓存的管理者希望缓存命中率接近 100%。而实际得到的命中率则与缓存的大小、缓存用户兴趣点的相似性、缓存数据的变化或个性化频率,以及如何配置缓存有关。
    • 命中率很难预测,但对现在中等规模的 Web 缓存来说,40% 的命中率是很合理的。

    3. 字节命中率

    • 由于文档并不全是同一尺寸的,所以文档命中率并不能说明一切。
    • 有些大型对象被访问的次数可能较少,但由于尺寸的原因,对整个数据流量的贡献却更大。因此,有些人更愿意使用字节命中率(byte hit rate)作为度量值。
    • 字节命中率:是缓存提供的字节在传输的所有字节中所占的比例。
    • 通过这种度量方式,可以得知节省流量的程度。100% 的字节命中率说明每个字节都来自缓存,没有流量流到因特网上去。
    • 文档命中率和字节命中率对缓存性能的评估都是很有用的:
      • 文档命中率:说明阻止了多少通往外部网络的 Web 事务。事务有一个通常都很大的固定时间成分(比如,建立一条到服务器的 TCP 连接),提高文档命中率对降低整体延迟(时延)很有好处。
      • 字节命中率:说明阻止了多少字节传向因特网。提高字节命中率对节省带宽很有利。

    4. 区分命中和未命中

    • HTTP 没有为用户提供一种手段来区分响应是缓存命中的,还是访问原始服务器得到的。在这两种情况下,响应码都是 200 OK,说明响应有主体部分。有些商业代理缓存会在 Via 首部附加一些额外信息,以描述缓存中发生的情况。
    • 客户端有一种方法可以判断响应是否来自缓存,就是使用 Date 首部。将响应中 Date 首部的值与当前时间进行比较,如果响应中的日期值比较早,客户端通常就可以认为这是一条缓存的响应。
    • 客户端也可以通过 Age 首部来检测缓存的响应,通过这个首部可以分辨出这条响应的使用期。
    展开全文
  • 缓存命中(cache hit):可以用已有的副本为某些到达缓存的请求提供服务。 缓存命中(cache miss):其他一些到达缓存的请求可能会由于没有副本可用,而被转发给原始服务器。 1. 再验证 HTTP 再验证 (revalidation)...
    • 缓存很有帮助,但缓存无法保存世界上每份文档的副本,即便可以保持也不能进行及时的更新。
    • 缓存命中(cache hit):可以用已有的副本为某些到达缓存的请求提供服务。
    • 缓存未命中(cache miss):其他一些到达缓存的请求可能会由于没有副本可用,而被转发给原始服务器。

    在这里插入图片描述

    1. 再验证

    HTTP 再验证 (revalidation):原始服务器的内容可能会发生变化,缓存要不时对其进行检测,看看它们保存的副本是否仍是服务器上最新的副本,进行“新鲜度检测”。

    缓存可以在任意时刻,以任意的频率对副本进行再验证。但由于缓存中通常会包含数百万的文档,而且网络带宽是很珍贵的,所以大部分缓存只有在客户端发起请求,并且副本旧得足以需要检测的时候,才会对副本进行再验证。

    为了有效地进行再验证,HTTP 定义了一些特殊的请求,不用从服务器上获取整个对象,就可以快速检测出内容是否是最新的。

    HTTP 为我们提供了几个用来对已缓存对象进行再验证的工具,但最常用的是 If- Modified-Since 首部。将这个首部添加到 GET 请求中去,就可以告诉服务器,只有在缓存了对象的副本之后,又对其进行了修改的情况下,才发送此对象。

    服务器收到 GET If-Modified-Since 请求时的 3 种情况:

    • 再验证命中(revalidate hit)或缓慢命中(slow hit):
      如果服务器对象未被修改,服务器会向客户端发送一个小的 HTTP 304 Not Modified 响应。只要缓存知道副本仍然有效,就会再次将副本标识为暂时新鲜的,并将副本提供给客户端。
    • 再验证未命中 :
      如果服务器对象与已缓存副本不同,服务器向客户端发送一条普通的、带有完整内容的 HTTP 200 OK 响应。
    • 对象被删除:
      如果服务器对象已经被删除了,服务器就回送一个 404 Not Found 响应,缓存也会将其副本删除。

    在这里插入图片描述

    • 再验证命中要与原始服务器进行核对,所以会比单纯的缓存命中要慢,但它没有从服务器中获取对象数据,所以要比缓存未命中快一些。

    • 再验证未命中几乎和缓存未命中速度一样。

    在这里插入图片描述

    2. 缓存命中率
    • 缓存命中率(cache hit rate,或称为缓存命中比例):由缓存提供服务的请求所占的比例。有时也被称为文档命中率(document hit rate)。
    • 命中率在 0 到 1 之间, 但通常是用百分数来描述的,0% 表示每次请求都未命中(要通过网络来获取文 档),100% 表示每次请求都命中了(在缓存中有一份副本)。有时,人们会在命中率中包括再验证命中,但有时候命中率和再验证命中率是分别测量的。在检测命中率的时候,要确定自己知道什么才是“命中”。
    • 缓存的管理者希望缓存命中率接近 100%。而实际得到的命中率则与缓存的大小、缓存用户兴趣点的相似性、缓存数据的变化或个性化频率,以及如何配置缓存有关。
    • 命中率很难预测,但对现在中等规模的 Web 缓存来说,40% 的命中率是很合理的。
    3. 字节命中率
    • 由于文档并不全是同一尺寸的,所以文档命中率并不能说明一切。
    • 有些大型对象被访问的次数可能较少,但由于尺寸的原因,对整个数据流量的贡献却更大。因此,有些人更愿意使用字节命中率(byte hit rate)作为度量值。
    • 字节命中率:是缓存提供的字节在传输的所有字节中所占的比例。
    • 通过这种度量方式,可以得知节省流量的程度。100% 的字节命中率说明每个字节都来自缓存,没有流量流到因特网上去。
    • 文档命中率和字节命中率对缓存性能的评估都是很有用的:
    • 文档命中率:说明阻止了多少通往外部网络的 Web 事务。事务有一个通常都很大的固定时间成分(比如,建立一条到服务器的 TCP 连接),提高文档命中率对降低整体延迟(时延)很有好处。
      字节命中率:说明阻止了多少字节传向因特网。提高字节命中率对节省带宽很有利。
    4. 区分命中和未命中
    • HTTP 没有为用户提供一种手段来区分响应是缓存命中的,还是访问原始服务器得到的。在这两种情况下,响应码都是 200 OK,说明响应有主体部分。有些商业代理缓存会在 Via 首部附加一些额外信息,以描述缓存中发生的情况。
    • 客户端有一种方法可以判断响应是否来自缓存,就是使用 Date 首部。将响应中 Date 首部的值与当前时间进行比较,如果响应中的日期值比较早,客户端通常就可以认为这是一条缓存的响应。
    • 客户端也可以通过 Age 首部来检测缓存的响应,通过这个首部可以分辨出这条响应的使用期
    展开全文
  • Memcached,一个分布式的缓存 缓存命中率2011-08-21 17:52 Memcached,一个分布式的缓存 缓存命中率: Q:什么样的缓存才是好缓存? 能解决问题的缓存就是好缓存。这句话简直就是废话,相当于白猫、...
     
    

    Memcached,一个分布式的缓存  缓存命中率:

    Q:什么样的缓存才是好缓存?
    能解决问题的缓存就是好缓存。这句话简直就是废话,相当于白猫、黑猫,抓住老鼠的就是好猫。
    那在解决问题前提下,哪个缓存才是好缓存呢?这个问题我的答案是:缓存命中率高的缓存是好缓存。
    在解决问题前提下,命中率高的缓存比命中率低的缓存,在硬件投入上可能会比较小,同时缓存的数量比命中率低的缓存数量也可能少,这样寻址的速度肯定比较快。所以命中率高的缓存是好缓存。

    缓存的命中率
    一个缓存的实体在被丢到缓存中后,在这个实体被缓存的期间(这个实体被缓存的生命周期内),如果外部一次都没有使用过它,这个缓存实体的命中率就是0。这个实体被请求的次数越多,它的缓存命中率越高。
    上面说的是缓存中一个实体的命中率。对于缓存整体来说,它的命中率则是上面各个被缓存的个体的命中率分布图。
    对于缓存来说:通常最常使用的个体之占总体的很小一部分。最不常使用的占整体的很大一部分。如下图所示:

    所以我们经常会看到类似这样的数据:
    缓存的1万个元素中,有100个被频繁的使用,几乎每分钟都会被使用一次。2000个数据,每小时被请求一次。3000个数据,每天被请求一次,剩下的数据,被丢到缓存中后一次都没有被使用过。
    现在硬件发展很快,如果我们只是需要缓存1万个数据的话,我们完全可以做到不管这1万个数据是否被使用到,全部丢到缓存,这样只要找数据,肯定缓存中有这个数据。而不需要作额外的运算,或者不需要向数据库发出请求。
    但是:硬件发展快,数据量发展也快。小型的网站,缓存1万条数据,也就全部缓存了。但是大型网站最少也是上百万的数据量或者上T级别的数据,这些数据量显然不能都丢到缓存。这时候设计一个合理的缓存方案,提高缓存的命中率,就非常重要。而且是必须的。

    提高缓存命中率的一些常见方法
    纯技术的角度来说,我们只有记录了用户的单位时间的请求数,并依照这个信息来把最常被使用的数据缓存起来。
    但更多的时候,我们是根据业务逻辑来提高缓存命中率的。比如:去年,前年发表的博客,这类文章的浏览请求,一般一天至少可怜的几次。一般不应该缓存到内存中。
    又比如,回复数多的帖子,一般被请求数会比回复数少的帖子会被更多人次看到。 
    我们应该通过上面逻辑,根据我们实际业务逻辑,提供一个缓存算法,提高缓存的命中率。让在我们硬件允许的条件下,缓存适当的数据,而不是所有数据。

    一个反面的例子就是:不管三七二十一,一个大型的博客站点,一篇文章被用户请求的时候,发现不在内存缓存中,就从数据库中读出,然后丢到缓存。
    要知道,现在爬虫程序很多的。另外,博客这类搜索引擎友好的站点,决大多数的访问压力是搜索引擎搜索过来的。而这些访问一般都是1小时,或者1天之内,对某篇文章只有几次甚至1次请求,之后再也没有了。上面作缓存的方法,命中率会非常低的。
    这里也许就有人会问,既然你不建议我缓存这些博客的内容,但是我如何提高我站点的性能呀,我至少得保证我博客站点不会速度慢的无法响应用户请求呀。
    这个问题的解决方案有很多,一个最简单的方法就是把这些博客做成静态Html页面,也就是文件系统的缓存,文件系统因为硬盘的原因,可以简单理解成可以无限扩容,这样就可以把很多命中率低的内容进行缓存。
    如果你的页面需要一些动态逻辑判断,你可以把数据缓存成XML文件,然后服务器段整合这些XML文件,或者是包含文件。这也是种不错的方法。

    说了这么多缓存命中率的问题,简单汇总一下缓存命中率的观点:

    小型网站可以全部数据缓存,一般压力也不会很大,可以忽略缓存命中率问题
    大型服务无法全部数据缓存,只能部分数据缓存,这时候就需要架构师设计出对该业务逻辑适用的缓存方法,尽可能的提高缓存的命中率。
    提高命中率的方法大多是跟业务逻辑捆绑的,需要跟具体问题具体分析
    对于不能被内存缓存的数据,最简单的提高性能方法就是使用文件缓存。
    文件缓存可以整个内容缓存成一个静态文件;也可以是整个页面的一个区域被缓存成一个文件,然后被包含;也可以是把一个实体序列化成XML文件进行缓存。

    下面我们看看缓存的其他几个不那么重要的方面:

    缓存的生命周期内的活动
    永久不过期,永久不变更的内容,这类东西就不应该放在缓存。缓存是临时的存储,而不是永久的,所以缓存的生命周期是有限的。
    它依次可能会经历如下活动
    进入缓存。(进入缓存的时候,可能需要指定它以后的过期策略,如果不指定,需要使用系统默认的过期策略)
    从缓存中获得它,注意,这时候需要处理线程安全的问题
    更新缓存,注意,也需要考虑线程安全问题
    离开缓存,这个可能是外部请求,也可能是缓存根据过期策略把它清理掉。

    缓存的过期策略
    一般我会问,你所接触的缓存中,碰到过那些缓存过期策略?
    最常见的几种过期策略如下:
    多长时间没有被请求,则过期,最典型的就是ASP和ASP.net 提供的 Section 功能。其实它就是一个缓存。
    依赖于文件变更的缓存,一旦文件被修改,缓存则过期,典型的是 WEB站点的 Web.config ,一旦这个文件变更,不但缓存重起,IIS进程也会进行一次释放工作。
    在此基础上,可能看到很多依赖关系的缓存过期策略。比如依赖于数据库的缓存过期策略。
    当然,业务逻辑里可能会有更复杂的过期策略,必须CSDN新版积分制论坛中,帖子列表缓存会在列表数据缓存达到600时,把它清理到550条数据。
    又比如新积分制论坛帖子的缓存过期,则是没有任何列表引用这个帖子后,则这个帖子过期。

    缓存的同步问题
    使用缓存,则意味着同样的数据,可能有多份并存。如果你的代码没有考虑某种情况,导致了这两份数据不一致了。这时候就会有问题发生。
    解决方法很简单,把你的业务逻辑,代码触发情况都考虑清楚,不要遗留没有触底的地方。
    简单的方法会导致你的代码逻辑变得非常复杂。
    这也就是有些人,在非必要的时候,建议你不要用缓存的原因。一旦开始使用缓存,你就应该准备增加大量的代码来处理数据同步的问题

    初始化填充缓存数据
    有时候在缓存被初始化后,还需要预先填充一些数据到缓存中。这就是缓存数据的初始化操作。
    缓存数据的初始化操作需要考虑以下问题
    需要多长时间进行初始化,一般如果是站点的话,我们可能在 Global.asa 的 Application_OnStart 中处理这个初始化工作。初始化的一般不能太久,这时候就是考验我们代码优化的能力了。
    初始化的时候,一般是批量导入数据,而不是我们正常使用的时候,一次处理一个数据。

    展开全文
  • 缓存命中率的介绍 命中:可以直接通过缓存获取到需要的数据。 不命中:无法直接通过缓存获取到想要的数据,需要再次查询数据库或者执行其它的操作。原因可能是由于缓存中根本不存在,或者缓存已经过期。 通常来讲,...
  • 了解一下缓存命中

    2020-06-17 12:07:26
    缓存命中率指的是数据从缓存中读取的次数与总读取次数的比率,这里的总读取次数=从缓存中读取的次数+从慢速设备中读取的次数,公式如下: 缓存命中率=从缓存中读取的次数/总读取次数 通过监控缓存命中率可以知道...

    缓存命中率指的是数据从缓存中读取的次数与总读取次数的比率,这里的总读取次数=从缓存中读取的次数+从慢速设备中读取的次数,公式如下:

    缓存命中率=从缓存中读取的次数/总读取次数
    

    通过监控缓存命中率可以知道缓存是否发挥出良好的作用。

    展开全文
  • MySQL缓存命中率概述
  • 如何提高缓存命中

    2019-01-16 00:38:26
    如何提高缓存命中缓存命中率的介绍 命中:可以直接通过缓存获取到需要的数据。 不命中:无法直接通过缓存获取到想要的数据,需要再次查询数据库或者执行其它的操作。原因可能是由于缓存中根本不存在,或者缓存...
  • 其中很多人谈到了缓存命中率的问题,应用缓存的命中率取决于很多的因素: 1、应用场景 是OLTP还是OLAP应用,即使是OLTP,也要看访问的频度,一个极少被访问到的缓存等于没有什么效果。一般来说,互联网网站是...
  • 1、5、1、3、5、2、4、1、2,出现缓存直接命中次数是(),最后缓存中即将准备淘汰的数据项是() 解答: 分析:列出每一次访问数据项时,缓存的状态 1 1,5 5,1 命中 5,1,3 1,3,5 命中 1,3,5,...
  • 缓存命中率 = 命中次数 / 请求总次数   2、统计缓存命中率实现方式  分析Nginx里的Access日志  awk命令使用   3、Nginx缓存命中率分析配置 (1)nginx.conf配置 (2)proxy_cache.conf配置 4、查看...
  • memcached 缓存命中

    千次阅读 2016-12-02 10:05:08
    缓存命中率的介绍 命中:可以直接通过缓存获取到需要的数据。 不命中:无法直接通过缓存获取到想要的数据,需要再次查询数据库或者执行其它的操作。原因可能是由于缓存中根本不存在,或者缓存已经过期。 ...
  • 其中很多人谈到了缓存命中率的问题,应用缓存的命中率取决于很多的因素: 1、应用场景 是OLTP还是OLAP应用,即使是OLTP,也要看访问的频度,一个极少被访问到的缓存等于没有什么效果。一般来说,互联网网站是...
  • Redis 缓存命中率计算

    2021-03-09 14:17:44
    2.运行命令 info ,得到如下参数 ...3.缓存命中率 = keyspace_hits / (keyspace_hits + keyspace_misses) 备注:当我们set数据时他们的值都不变;缓存命中率-是我们读取数据的时候命中的比率。 ...
  • 缓存命中

    2012-05-11 19:08:56
    很多时候需要监控服务器上的Memcached运行情况,比如缓存的查询次数命中率之类的。但找到的那个memcached-tool是linux下用perl写的,我也没试过windows能不能用。后来发现个简单的办法可以做到,就是使用Telnet。 ...
  • 其中很多人谈到了缓存命中率的问题,应用缓存的命中率取决于很多的因素:  1、应用场景  是OLTP还是OLAP应用,即使是OLTP,也要看访问的频度,一个极少被访问到的缓存等于没有什么效果。一般来说,互联网网站...
  • 先说结论:良好的局部性会让应用程序执行的更快,本质是提高对缓存数据的命中率. 局部性原理 计算机中的局部性设计来源于缓存的概念,由于存储器的速度不一样,寄存器>高速缓存存储器>主存>磁盘,为了提高系统...
  • Redis缓存命中率如何计算

    千次阅读 2020-02-26 17:55:30
    里面会有如下两个参数: ...缓存命中率 = keyspace_hits / (keyspace_hits + keyspace_misses) 当我们作如下操作时,以上两个参数的变化如下: 我们get一个缓存中有效的key,keyspace_hits = key...
  • Mysql缓存命中

    2016-11-10 09:29:17
    MySQL缓存命中率,网上说法不一,下面我说下我的看法,大家轻拍: 总的select查询数等于com_select(没命中) + qcache_hits(命中) + 解析错误的查询。 再来看看Com_select变量: [sql] vi
  • memcache缓存命中率分析

    千次阅读 2015-04-01 22:43:54
    memcache缓存命中率分析  对memcache缓存命中率分析,对我们业务优化有着重要的意义。  缓存命中率定义:  命中率=请求成功数/请求总数  如何检测memcache的缓存命中率:  1.使用memcache自带的memcache.php  ...
  • redis缓存命中率计算

    2020-03-18 18:41:05
    keyspace_hits:命中的次数 keyspace_misses:没有命中的次数 所以缓存命中率的计算方法 keyspace_hits / (keyspace_hits + keyspace_misses) 本例中,缓存命中率为 73592202 / (73592202 + 103528090) = 0....
  • 关于Mybatis缓存命中率的一己之见

    千次阅读 2018-07-09 17:25:37
    影响缓存命中率的因素有很多,比如缓存太小,缓存的时间太短等都会影响缓存的命中率;但从本质上讲,影响缓存命中率的因素还是取决于缓存的粒度,缓存的粒度越小缓存的命中率也就越高,目前缓存粒度最小的是对象缓存...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 40,481
精华内容 16,192
关键字:

缓存未命中次数