`
robbin
  • 浏览: 4836801 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
377a9ecd-1ea1-34ac-9530-9daa53bb2a7b
robbin谈管理
浏览量:138055
社区版块
存档分类
最新评论

漫谈应用缓存的命中率问题

    博客分类:
  • Java
阅读更多
这篇文章源自于:

http://www.iteye.com/topic/77195

其中很多人谈到了缓存命中率的问题,应用缓存的命中率取决于很多的因素:

1、应用场景
是OLTP还是OLAP应用,即使是OLTP,也要看访问的频度,一个极少被访问到的缓存等于没有什么效果。一般来说,互联网网站是非常适合缓存应用的场景。

2、缓存的粒度
毫无疑问,缓存的粒度越小,命中率就越高,对象缓存是目前缓存粒度最小的,因此被命中的几率更高。举个例子来说吧:你访问当前这个页面,浏览帖子,那么对于ORM来说,需要发送n条SQL,取各自帖子user的对象。很显然,如果这个user在其他帖子里面也跟贴了,那么在访问那个帖子的时候,就可以直接从缓存里面取这个user对象了。

3、架构的设计
架构的设计对于缓存命中率也有至关重要的影响。例如你应该如何去尽量避免缓存失效的问题,如何尽量提供频繁访问数据的缓存问题,这些都是考验架构师水平的地方。再举个例子来说,对于论坛,需要记录每个topic的浏览次数,所以每次有人访问这个topic,那么topic表就要update一次,这意味着什么呢?对于topic的对象缓存是无效的,每次访问都要更新缓存。那么可以想一些办法,例如增加一个中间变量记录点击次数,每累计一定的点击,才更新一次数据库,从而减低缓存失效的频率。

4、缓存的容量和缓存的有效期
缓存太小,造成频繁的LRU,也会降低命中率,缓存的有效期太短也会造成缓存命中率下降。

所以缓存命中率问题不能一概而论,一定说命中率很低或者命中率很高。但是如果你对于缓存的掌握很精通,有意识的去调整应用的架构,去分解缓存的粒度,总是会带来很高的命中率的。

这里我可以举一个实际的案例,JavaEye2.0网站在使用对象缓存之前,通过MySQL的监控工具进行观察,在连续24小时的平均每秒发送SQL条数超过了200条,在使用对象缓存之后,连续24小时的平均每秒发送SQL条数下降到了120条左右,几乎下降了一半。

考虑到很多SQL都是分页语句,关联查询,条件查询,集合操作,都是不能被缓存的SQL,而真正能够被缓存的SQL只有根据主键查询对象和对象关联对象的查询。所以真正能够被缓存的SQL估计最多占所有SQL的60%。所以换算下来,应用缓存的命中率之高,已经相当惊人了。

不过这里要提醒的一点,有将近一半的SQL都被缓存,不意味着性能可以提升一倍。这是因为能够被缓存的都是按照主键查询单条记录的SQL,这些SQL本身即使发送到数据库,对数据库造成的压力也没有想像的那么大。真正对数据库造成庞大压力的正是那些没有索引的大表查询,和造成了全表扫描的关联查询,这些一旦涉及到全表扫描的查询,才是性能的真正杀手。当然了,不管怎么说,通过使用对象缓存,是毫无疑问可以大幅度降低数据库的负载压力的,有效提升web应用的性能的。

关于这一点,我再给出一组数据来加深大家的印象,通过使用操作系统网络工具进行统计:

JavaEye网站web server的端口每秒数据流量是2MB;
JavaEye网站的MySQL数据库端口的每秒数据流量是1.2MB;
而网站的memcached的端口每秒的数据流量高达5MB。



分享到:
评论
5 楼 抛出异常的爱 2007-05-09  
你这样的人还是少数。
4 楼 janh 2007-05-09  
Readonly 写道


另外,现在很多论坛都喜欢在帖子列表上直接显示分页,比如这样:
精华:     [Hibernate] 不做技术的奴隶
[ 分页: 1 2 3 4 5 6 7 8  ]

但是偶怀疑几乎没有人会在列表上直接点击具体的页数,都是到帖子第一页或者最后一页,然后在帖子里面再慢慢翻页的,猜想这个显示方式是很耗sql的,如果去掉这种无太大用处的页面设计,对于cache的设计也会有很好的帮助。


不认为这是无太大用处的功能,我就经常点中间的页数,如果第一次看这个帖子时只有4页,过了几天达到8页了,那我显然直接从第4页看起,一次一次点下一页岂不是麻烦,而且更浪费服务器资源,有时要看谁在第几页的发言当然也是直接点页数。
3 楼 Readonly 2007-05-09  
robbin 写道

考虑到很多SQL都是分页语句,关联查询,条件查询,集合操作,都是不能被缓存的SQL,而真正能够被缓存的SQL只有根据主键查询对象和对象关联对象的查询。所以真正能够被缓存的SQL估计最多占所有SQL的60%。所以换算下来,应用缓存的命中率之高,已经相当惊人了。

如果Active Record有类似Hibernate的query cache功能,在这个时候就可以体现出它的威力了,拿论坛来来作为例子,99%以上的访问都只是打开分类的第一页,最多也不会超过3页,加上Cache是非常有效的,偶们有一个应用,和论坛很类似,在加query cache之前,峰值只能支持80 hit/sec,加了以后,上升到了460 hit/sec.

另外,现在很多论坛都喜欢在帖子列表上直接显示分页,比如这样:
精华:     [Hibernate] 不做技术的奴隶
[ 分页: 1 2 3 4 5 6 7 8  ]

但是偶怀疑几乎没有人会在列表上直接点击具体的页数,都是到帖子第一页或者最后一页,然后在帖子里面再慢慢翻页的,猜想这个显示方式是很耗sql的,如果去掉这种无太大用处的页面设计,对于cache的设计也会有很好的帮助。
2 楼 JaNer 2007-05-09  
认真看了,读懂了你的意思!但不明白具体该怎么做,比如我在一个Struts + Spring + iBatis + MySql的项目中怎么实现大侠您说的对象缓存?Web容器为TomCat ,,,,,
1 楼 shaucle 2007-05-09  
的确收益颇多.
ms对象缓存在多数情况下是个不错的选择.

说到对象的话,题外话:
http://www.theserverside.com/news/thread.tss?thread_id=45306

相关推荐

    计算机缓存漫谈

    同时,避免缓存未命中的情况,如缓存冲突(由于地址映射导致相同位置的多个数据无法同时在缓存中存储)和伪共享(多线程环境中,不同线程访问的共享变量位于同一缓存行,导致无效的缓存更新)。 总的来说,计算机...

    [NET 4.0面向对象编程漫谈 应用篇].金旭亮---高清版.pdf

    .NET 4.0面向对象编程漫谈应用篇是一本专注于.NET 4.0框架下进行面向对象编程技术的电子书籍。作者金旭亮将其专业见解和实践经验融入到这本书中,让读者在应用层面上深入理解面向对象编程(Object-Oriented ...

    net 4.0面向对象编程漫谈 应用篇

    总而言之,《.NET 4.0面向对象编程漫谈 应用篇》这本书会深入讲解这些核心概念,并结合.NET 4.0的特性和实践案例,帮助读者掌握面向对象编程在实际项目中的应用。通过学习,开发者不仅可以提升编程技巧,还能更好地...

    对数漫谈及对数在计算机中的应用

    ### 对数漫谈及对数在计算机中的应用 #### 一、对数的起源与发展历程 对数作为一种数学运算,其重要性在于简化了复杂的乘除、乘方和开方等运算,大大提高了计算效率,从而促进了科学技术的发展。早在16世纪末期,...

    架构漫谈(王概凯架构系列文章整理)

    架构漫谈(三):如何做好架构之识别问题 架构漫谈(四):如何做好架构之架构切分 架构漫谈(五):什么是软件 架构漫谈(六):软件架构到底是要解决什么问题? 架构漫谈(七):不要空设架构师这个职位,给他实权...

    漫谈应用广泛的金属材料.pptx

    【漫谈应用广泛的金属材料】 金属材料在人类生活中扮演着至关重要的角色,它们的历史可以追溯到石器时代。从最初的石器,人类逐渐过渡到使用金属材料,经历了铜器时代和铁器时代,直至现代,金属材料的应用已经渗透...

    漫谈线上问题排查.pdf

    大厂高手骆俊武出品的《漫谈线上问题排查》电子书

    华为防火墙技术漫谈.z01

    华为防火墙技术漫谈》介绍华为传统防火墙关键技术原理、应用场景和配置方法,主要包括安全策略、攻击防范、NAT、双机热备、选路,并结合网上案例给出以上技术的综合应用配置举例,以防火墙网上实际需求为导向,采用...

    漫谈兼容内核 毛德操

    《漫谈兼容内核》是毛德操先生的一本深入探讨操作系统内核兼容性问题的专业著作。这本书主要针对计算机科学中的核心主题——操作系统内核,尤其是如何实现不同系统间的兼容性,提供了丰富的理论知识和实践经验。 ...

    漫谈高数pdf(共十篇)

    《漫谈高数》系列文章深入探讨了高等数学的核心概念,尤其聚焦于级数理论及其在实际问题中的应用。在首篇文章《漫谈高数(一)泰勒级数的物理意义》中,作者巧妙地将复杂的数学原理与直观的物理意义相结合,使读者能够...

    漫谈兼容内核.zip

    漫谈兼容内核之一:ReactOS怎样实现系统调用 漫谈兼容内核之二:关于kernel-win32的对象管理 漫谈兼容内核之三:Kernel-win32的文件操作 漫谈兼容内核之四:Kernel-win32的进程管理 漫谈兼容内核之五:Kernel-win32...

    漫谈兼容内核.7z

    谈兼容内核之一:ReactOS怎样实现系统调用.pdf 漫谈兼容内核之二:关于kernel -win32的对象管理.pdf 漫谈兼容内核之三:关于kernel-win32的文件操作.pdf 漫谈兼容内核之四:Kernel-win32的进程管理.pdf 漫谈兼容内核...

    华为防火墙技术漫谈.pdf

    华为防火墙技术漫谈,理论篇共包含十章,涵盖了会话与状态检测、安全策略、攻击防范、NAT、GRE 、L2TP 、IPSec 、SSL、双机热备、出口选路的原理、应用场景及配置方法

    AN-106_放大器应用漫谈

    ### AN-106_放大器应用漫谈 #### 概述 《AN-106_放大器应用漫谈》是一份由ADI(Analog Devices Inc.)提供的技术文档,主要介绍了各种放大器的应用场景及其相关的电路设计原理。这份文档涵盖了广泛的放大器应用...

    漫谈兼容内核[pdf]

    01.漫谈兼容内核之一:Wine的系统结构.pdf 02.漫谈兼容内核之二:关于kernel-win32的对象管理.pdf 03.漫谈兼容内核之三:关于kernel-win32的文件操作.pdf 04.漫谈兼容内核之四:Kernel-win32的进程管理.pdf 05.漫谈...

    《应用数学漫谈》作者: (苏)AH吉洪诺夫等 出版时间: 1986年

    作者: (苏)AH吉洪诺夫 出版社: 湖南教育 出版时间: 1986 装帧: 平装 页数: 212页

    漫谈兼容内核(毛德操)

    《漫谈兼容内核》是毛德操先生对操作系统内核兼容性问题深入探讨的一部作品,主要聚焦在Windows系统中的兼容内核技术。在这个领域,我们常常会遇到各种软硬件兼容性挑战,如何使内核能够适应不同环境、支持各种设备...

    漫谈高数——很好的资料

    导数描述了函数的变化率,积分则可以用来计算面积、体积以及物理问题中的瞬时速度和加速度。 2. 复变函数:讨论复数在微积分中的应用,如复积分、洛朗级数和解析函数,这在工程和物理领域有着广泛的应用。 3. 微分...

Global site tag (gtag.js) - Google Analytics