网站缓存详解

1. 认识缓存

缓存:
原意是指可以进行高速数据交换的存储器。当cpu处理数据时,先到cache中寻找,如果数据已经读取,就不需要去RAM中读取了

在web开发中,缓存主要应用在以下几个方面,PHP为例:

  • 底层有cpu缓存,磁盘文件系统缓存
  • 应用层有zend虚拟机变量缓存,有memcached这样的key-value内存缓存
  • 数据库层有Table cache, thread cache, query cache
  • servlet容器层有Apache的缓存
  • 浏览器缓存

这些缓存都是存放在内存或者硬盘中。一般的情况是需要速度的话存在内存中,需要持久性和数据量比较大时用硬盘缓存。

命中率:
指请求缓存次数与缓存返回正确结果次数的比例。
缓存最大数据量:
能处理的元素最大个数或能使用的最大存储空间

缓存更新策略(缓存内存满后,就会剔除老的缓存)

  • FIFO (first in first out)最先进入缓存的数据最先被清理出去
  • LFU (less frequently used) 最少是用的元素会被清理掉。需要换存有hit属性
  • LRU (least recently used) 最近最少使用的元素被清理。需要有时间戳。

2. 缓存实例

-- Opcode缓存:

一个php程序运行完后,内存马上释放,基本所有数据都被销毁,此时内存不存在php代码中的数据,这和常住内存的java等语言有显著区别。
优点: 有效避免内存泄露,内存回收机制简单。避免因为一个程序而连累整个服务器。
缺点: 无法服用已有数据,每个请求都重复执行 请求--翻译--执行 过程

opcode(operation code)缓存就是虚拟机吧php代码编译成一种中间码的结果缓存起来(硬盘或内存)。下一次运行到此页面,直接解释这些代码就行了。省去Flex语法其进行语法编译和大部分语法检查
-- MySQL缓存

Mysql实例: Querycache 缓存客户端提交给mysql的select语句的结果集。 就是把select语句和结果做hash映射后保存在一定的内存区域内

-- 客户端缓存

由浏览器来实现的,将浏览器在硬盘中存储已经看过的网页副本。
如果URL相同,缓存直接使用副本相应访问,而不用向服务器发送请求
缓存内容应用情形:

  • 有完整的过期时间和寿命控制头,并且没过期。 就是在expires和cache-control中的max-age值
  • 浏览器已经使用过缓存副本,并且在一个会话中检查过过期时间。例如后退,前进
  • 如果缓存太旧了,会向服务器发送校验请求。如果资源不变,则返回304,内容为空

内容整理自 《php核心技术与最佳实践》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值