为什么要使用缓存
一个网站或者一个应用的标准流程是浏览器向应用服务器发出请求, 应用服务器做一些计算和逻辑判断之后再请求数据库, 数据库收到请求后在经过计算将数据返回给应用服务器, 应用服务器再次计算后把数据返回给浏览器
那么, 随着 web 业务的复杂度和并发量的增加, 应用服务器所做的计算和逻辑处理越来越多, 而应用服务器的资源是有限的, 且数据库每秒接受并处理请求的次数也是有限的. 为了在有限的资源提供尽可能多的吞吐量, 就是减少计算量, 缩短请求流程 (减少网络 I/O 或硬盘 I/O). 这时, 就用到了缓存 (Cache)
缓存三大要素
1. 命中率
百度百科: 终端用户访问加速节点时, 如果该节点有缓存住了要被访问的数据时就叫做命中, 如果没有的话需要回原服务器取, 就是没有命中. 取数据的过程与用户访问是同步进行的, 所以即使是重新取的新数据, 用户也不会感觉到有延时. 命中率 = 命中数 /(命中数 + 没有命中数), 缓存命中率是判断加速效果好坏的重要因素之一
2. 更新缓存策略
一般更新? 缓存厕策略有三种:
FIFO, 最先被缓存的数据, 在缓存空间不足的情况下会被先清除
LFU, 最少使用的元素会被清除, 在缓存空间不足的情况下会先清除最少使用的数据, 即 hit 值最好的元素
LRU, 最近最少使用的元素会被清除, 当缓存空间不足时, 最近最少使用的元素将被清除
3. 缓存最大数据量
换存方式
1. 文件缓存
文件缓存就是把缓存数据存储到文件系统即硬盘中. 文件缓存优点
磁盘容量大, 价格低
磁盘比内容更稳定可靠, 断电后不会丢失数据, 存储也比较简单
固态硬盘的读写速度也比较快
容易扩展
文件缓存的开源产品 Secache, 用 PHP 实现的 key-value 数据库, 安装键值对的方式存储到文件
下载地址: https://code.google.com/archive/p/secache/downloads
特点:
PHP 实现, 无需任何扩展
使用 LRU 算法自动清除过期内容
最大支持 1GB 缓存文件
使用 hash 定位, 读取快
使用方法, 示例代码 testSecache.PHP
目录结构:
运行结果
2. 客户端缓存
客户端缓存或 Web 缓存根据请求保存输出内容的副本, 例如 html 页面, 图片, 文件等. 当下一次相同的请求过来时, 不需要再向服务器发送请求, 而是直接使用这些副本. 这些副本是浏览器实现的, 将服务器返回的这些资源保存在本地硬盘上.
客户端换出示例代码
访问 index.PHP 页面
点击 aaa 超级连接, 显示测试数据.
在当前页面点击浏览器的返回按钮到, 在点击 aaa 超链接. 不会再向服务器发送请求, 而是直接调用存储在本地的缓存页. 即使改变 webcache.PHP 中的 echo 内容. 浏览器也不会重新读取服务器上的资源.
只有当缓存到期, 缓存被清除或是强制刷新页面, 才会获取最新服务器数据
来源: http://www.bubuko.com/infodetail-2962195.html