高性能web网站中的缓存

开发一个高性能的web服务,缓存是必不可少的。缓存是万金油,下面介绍下我们web服务中用到了哪些缓存

1、前端缓存

对于静态资源,有三种方式。

  1. 根据last modified time,询问web server是否有更新,若not modified,则让浏览器使用本地缓存
  2. 根据etag标识,web server对比浏览器传过来的etag与服务器计算出的etag,若不同则返回最新的内容给浏览器。使用etag优于使用last modified time机制,毕竟基于内容算出来的标记更为靠谱。
  3. 根据expire标识,若max-age大于0,则可以使用本地缓存,完全不用请求web server

2、cdn

前端项目中依赖的资源(js,css等),在打包后会自动上传到cdn上,从而加速用户访问。
cnd是由分布在不同区域的边缘节点服务器群组成的分布式网络,替代传统以WEB Server为中心的数据传输模式。将用户的请求分配至最适合他的节点,使用户可以以最快的速度取得他所需的内容,有效解决Internet网络拥塞状况,提高用户访问的响应速度。

3、vanish本地缓存

项目中使用了varnish作为本地缓存。使用vanish将对读性能要求较高的配置类接口进行缓存(必须是get接口,并且响应的httpcode为200)。vanish在后端机器上监听8081端口,访问后端服务时,需要指定proxy为127.0.0.1:8081当本地vanish中缓存未过期时,读取缓存内容后直接返回。当缓存满时,vanish会根据LRU机制,把最旧的object释放掉。

4、redis 分布式缓存

使用varnish,可以在不侵入代码的情况下,缓存住大量读的接口。而在某些情况下,需要使用redis这种分布式缓存,在多台机器之间缓存数据。redis提供了丰富的数据结构与查询接口,事实上redis也是我们使用比较多的缓存之一。 但如果缓存的某个数据过大,例如几十MB,反复读取也会造成redis性能的下降。

5、apcu 进程间缓存

php5.5以后,opcache将代替apc做为php加速的位置,也就是代替其系统缓存的位置。并将用户缓存功能独立出来,开启新的组件,这个组件名称叫做apcu。使用时需要安装,并且在ini文件中加上apc.enabled=on打开。
apcu 使用共享内存机制,可以在同一台server的不同进程间缓存数据。apcu将数据缓存在内存中,相比redis等分布式缓存,省去了网络io的时间,性能会更好。 但apcu对缓存内存大小有要求。

    public static function get($key, $fun, $ttl)
    {
        if (!static::$isOpen || $ttl == 0) {
            return call_user_func($fun);
        }

        if (apcu_exists($key)) {
            return apcu_fetch($key);
        }
        $data = call_user_func($fun);
        if ($data) {
            apcu_store($key, $data, $ttl);
        }

        return $data;
    }

6、变量static缓存

在函数内将变量声明为static,在一次连接中可反复使用。速度快,效率高,实现简单

7、opcache缓存

当解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码,也称为操作码(Operate Code,opcode)。Opcode cache的目地是避免重复编译,减少CPU和内存开销。

8、mysql查询缓存

MySQL查询缓存可以跳过SQL解析优化查询等阶段,直接返回缓存结果给用户。当然前提比较苛刻,需要两次查询环境与sql完全一样

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容