免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: yanyangtian4502
打印 上一主题 下一主题

从案例引发的对缓存设计的思考,干货讨论,绝对不玩虚的(获奖名单已公布-2012-6-13) [复制链接]

论坛徽章:
0
21 [报告]
发表于 2012-05-17 13:38 |只看该作者
本帖最后由 yanyangtian4502 于 2012-05-17 20:37 编辑

看来这个问题还得我回答啊

其实windows的内核会对一些常用访问的静态文件进行缓存,把一些网页静态化,就是利用这一点,从而避免了页面动态生成的过程。但是要注意磁盘的容量问题以及文件的增长速度。

伪静态 不会缓存在内核中。

另外,如果采用了多台服务器,要考虑到文件之间的同步。


另外一个,就涉及到SEO的问题了。搜索引擎对静态页面比较的感兴趣,不过现在这方面可以不用这么管了,现在的引擎都智能的很。

论坛徽章:
0
22 [报告]
发表于 2012-05-17 13:52 |只看该作者
我们可以在windows服务器上运行下面的命令查看内核缓存的情况:
netsh http show cachestate

除了内核缓存之后,另外还有就是宿主的缓存,例如IIS,apache,这样的进程在运行的时候,也会把一些常用用的数据缓存起来,这一点,主要是通过修改相关的配置文件来实现,或者通过一些GUI来方便的配置。

例如,对于IIS而言,可以去applicationHost.config(IIS 7)中修改哪些文件可以缓存,默认是静态的,但是我们也可以使得动态页面的内容缓存。如下:


论坛徽章:
0
23 [报告]
发表于 2012-05-17 13:55 |只看该作者
我现在就坐等Liunx的朋友 说说相关的内容啊

论坛徽章:
0
24 [报告]
发表于 2012-05-17 15:50 |只看该作者
yanyangtian4502 发表于 2012-05-17 13:52
我们可以在windows服务器上运行下面的命令查看内核缓存的情况:
netsh http show cachestate


这Windows的配置真多,IIS我是好久没搞了,一直Linux
在WEB也就是页面级缓存,常用的Varnish,Squid,Nginx+第三方模块
这三个怎么配置论坛里N多就不多说了
Varnish可以使用内存来处理缓存,这是一个很不错的选择
Nginx在小量的缓存应用上也是很理想,而且支持多CPU

论坛徽章:
0
25 [报告]
发表于 2012-05-17 15:55 |只看该作者
yanyangtian4502 发表于 2012-05-17 10:07
既然我们谈缓存这个话题,那么我们就把这个话题谈细致一点,因为很多时候:谈大帽子的话很多人都会滔滔不绝 ...



http头的软件嘛,如果一般开发不写的话,都是缓存上的
特殊需求的话,咱们也会配置规则对各种不同类型的文件进行不同时间的缓存
常用的也就是301 302这种转向的配置

缓存一些文件什么的不是到重点,因为它本身就是做这个的,而且有N多规则。主要是根据公司的需要去开发需要的功能,比如日志模式,这比较常见。

论坛徽章:
0
26 [报告]
发表于 2012-05-17 16:10 |只看该作者
回复 24# Gray1982
这些东西不错!
选择也比较多!

   

论坛徽章:
0
27 [报告]
发表于 2012-05-17 16:18 |只看该作者
说完了服务端的内核缓存,宿主缓存之后,可以说说应用层的数据缓存了!
这里 就引入下面的话题:

1. 缓存的策略是什么
2.如何设计比较智能的缓存

至于缓存什么数据,这就不用我说了,因为网络已经有了一大堆人在讨论,也是见仁见智。

那么,我这就说说 我在优化的过程中为一些企业的项目选项的缓存的策略,即如何缓存数据,使得缓存的数据尽可能多的被命中,而且尽可能少的使用内存(即,只缓存必要的数据)。

论坛徽章:
0
28 [报告]
发表于 2012-05-17 16:33 |只看该作者
本帖最后由 yanyangtian4502 于 2012-05-17 16:35 编辑

缓存的策略是什么

我这里自己将其总结为三个:
1.全缓存
2.半缓存
3.基于统计的缓存

为了说明这个问题,我这里以分页为例子来说明这个问题,我这里给出一个图,就是平时我们看到的分页的图,


很多的时候,在大量数据展示的过程中,我们总是喜欢分页展示,那个,如何设计这个分页的。

当然,我们完全可以一页页的去数据库中获取相应的数据,但是很多的时候,我们不是这样做的,例如,每页数据有20条,我们可能会实现预加载100条数据在缓存中,每次展示将一页的数据进行展示。

下面,就开始说说这个“全缓存”。

接着上面的分页的例子,我们预先取来100条,然后用户就不断的翻页,此时,如果用户翻到了第6页,或者后面,此时,我们没有缓存后面的数据,此时,我们就开始再次去获取100条数据,那么此时,在缓存中就有了200条,并且是从1到10页的。以此类推,我将之定义为“全缓存“,因为最后的结果将会缓存用户查看的所有数据。(其实,很少有用户想翻到后面的十几页去的)

这种策略非常常用,但是不可滥用,要针对不同的类型的应用,并且还得看数据变化的频率。因为稍不注意,就是内存使用过多了。

这种方式最理想的利用场景在站点没有搜索功能,并且通过类似Tag标签来代替查询的项目中。如图的例子:


现在的很多的站点不能没有搜索功能,当然,我们可以酌情的考虑使用这种方式。我们后面会介绍将这个方法与其他的结合起来,构造更加智能的策略。

论坛徽章:
0
29 [报告]
发表于 2012-05-17 16:52 |只看该作者
本帖最后由 Gray1982 于 2012-06-15 14:14 编辑

回复 26# yanyangtian4502


   嗯,个人觉得在Linux上,各种开源的软件比较多,而且选择范围比较大
一大部分都是C来做二次开发的,比较自由的改动

在Linux内核方面,如果你不更改,一般只参数就够了

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
30 [报告]
发表于 2012-05-17 18:26 |只看该作者
回复 13# yanyangtian4502


    very good
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP