| 这篇文章源自于: http://www.javaeye.com/topic/77195 其中很多人谈到了缓存命中率的问题,应用缓存的命中率取决于很多的因素: 1、应用场景 2、缓存的粒度 3、架构的设计 4、缓存的容量和缓存的有效期 所以缓存命中率问题不能一概而论,一定说命中率很低或者命中率很高。但是如果你对于缓存的掌握很精通,有意识的去调整应用的架构,去分解缓存的粒度,总是会带来很高的命中率的。 这里我可以举一个实际的案例,JavaEye2.0网站在使用对象缓存之前,通过MySQL的监控工具进行观察,在连续24小时的平均每秒发送SQL条数超过了200条,在使用对象缓存之后,连续24小时的平均每秒发送SQL条数下降到了120条左右,几乎下降了一半。 考虑到很多SQL都是分页语句,关联查询,条件查询,集合操作,都是不能被缓存的SQL,而真正能够被缓存的SQL只有根据主键查询对象和对象关联对象的查询。所以真正能够被缓存的SQL估计最多占所有SQL的60%。所以换算下来,应用缓存的命中率之高,已经相当惊人了。 不过这里要提醒的一点,有将近一半的SQL都被缓存,不意味着性能可以提升一倍。这是因为能够被缓存的都是按照主键查询单条记录的SQL,这些SQL本身即使发送到数据库,对数据库造成的压力也没有想像的那么大。真正对数据库造成庞大压力的正是那些没有索引的大表查询,和造成了全表扫描的关联查询,这些一旦涉及到全表扫描的查询,才是性能的真正杀手。当然了,不管怎么说,通过使用对象缓存,是毫无疑问可以大幅度降低数据库的负载压力的,有效提升web应用的性能的。 关于这一点,我再给出一组数据来加深大家的印象,通过使用操作系统网络工具进行统计: JavaEye网站web server的端口每秒数据流量是2MB; |
漫谈应用缓存的命中率问题 zz javaeye
缓存优化实战
最新推荐文章于 2024-05-31 08:34:40 发布
本文探讨了缓存命中率的影响因素,包括应用场景、缓存粒度、架构设计及缓存容量等,并通过JavaEye网站的实际案例展示了对象缓存如何显著减少数据库负载。
284

被折叠的 条评论
为什么被折叠?



