Code前端首页关于Code前端联系我们

PHP缓存技术:浏览器、数据文件、WEB服务器...

terry 2年前 (2023-09-25) 阅读数 49 #后端开发

概述

PHP 缓存技术:浏览器、数据文件、WEB服务器…

缓存已经成为项目中必不可少的一部分。这是提高性能的最好方法,比如减少网络I/O、磁盘I/O等,使项目加载速度更快。

缓存可以是CPU缓存、内存缓存、硬盘缓存。不同的缓存查找速度也不同(CPU缓存比内存缓存比硬盘缓存好)。

那我就一一介绍了。

浏览器的缓存

浏览器将请求的页面存储在客户端的缓存中。当访问者再次访问该页面时,浏览器可以直接从客户端的缓存中读取数据,减少服务器的负载。访问,加快网页加载速度。

强大的缓存

用户发送的请求直接来自客户端的缓存,无需询问服务器。

根据Expires和Cache-Control判断强缓存是否命中。

代码为:

header('过期时间:'.gmdate('D, d M Y H:i:s', time() + 3600).'GMT');❀ header( "Cache控制:最大年龄=3600"); //有效期3600秒

Cache-Control还可以设置以下参数:

  • public:所有用户均可缓存(最终用户浏览器/CDN服务器) 仅缓存:最终用户的浏览器by
  • no-cache:不使用本地缓存
  • no-store:禁用数据缓存

协商缓存

User 是否将请求发送到服务器以使用客户端缓存。† ööö(' 最后修改: '.gmdate('D, d M Y H:i:s', $last_modify).' GMT');

header('HTTP/1.1 304'); //未修改

exit;

}

header('最后修改: '.gmdate('D, d M Y H:i:s').' GMT');

用户操作行为缓存中

操作行为过期最后修改
在标题栏中按回车有效有效有效❀ 标识符有效
新窗口有效有效
前进/后退有效 有效 有效 有效
F 5 Ctrl+F5 更新 无效无效

文件缓存

数据文件缓存

将低刷新和高读取的数据缓存到文件中。

例如,如果我们在项目中的多个地方使用城市数据进行三级链接,我们可以将城市数据缓存在一个文件(city_data.json)中,JS会直接读取这个文件,而不需要返回。终端服务器。

统计整个页面

CMS(内容管理系统),也许大家都知道,比如早期的DEDE和PHPCMS。可以在后台设置静态 HTML。当用户访问您的网站时,只需要读取静态HTML,无需后端数据库或向前端发出Ajax请求,从而加快了您网站的加载速度。 † 交付网络)内容分发网络。

用户访问网站时,自动选择最近的CDN节点的内容,无需请求源服务器,加快了网站的打开速度。

缓存主要包含HTML、图片、CSS、JS、XML等静态资源。? ,指定缓存过期时间,可以缓存HTML、图片、JS、CSS等。

打开http.conf并启用模块

expires_module module/mod_expires
.so 输入缓存过期时间:

#Open缓存 40000 秒 = 10 天)

ExpiresByType text /css A8640000

#js 缓存

ExpiresByType app/x-javascript A8640000 ExpiresByType text /css A8640000 /html A8 640000

#图像缓存

按类型过期图像/jpeg A8640000

按类型过期图像/gif A8640000

按类型过期图像/png A8640000 ❀

Nginx缓存使用过期参数指定缓存过期时间。 HTML、图像、JS、CSS 等缓存。

打开nginx.conf :

//以图片为例:

{mp|d|pco|jpg) 新位置

root html; 1一天后到期; #指定缓存时间

}

关于如何设置缓存的更多信息,请参见proxycachepath和proxy_cache。

操作码缓存

Operate Code(操作码)操作码。

PHP程序运行后,所有内存立即被释放,程序中的所有变量都被销毁。每个请求都必须被翻译并重新执行,这会降低速度。

解释器解析完脚本代码后,会生成中间代码,也称为操作代码,可以直接运行。

操作码的目的是避免重复翻译并减少 CPU 和内存开销。

APC 缓存

APC(替代 PHP Cache)可选 PHP 缓存。

APC 旨在提供一个免费、开放且可靠的框架来缓存和优化 PHP 中间代码。

APC可以去掉php动态解析和编译的时间,因此php脚本可以执行得更快。

APC 扩展最后发布于 2012-09-03。

有兴趣的话可以多了解一下。官方介绍:http://php.net/manual/zh/book.apc.php

eAccelerator

eAccelerator:PHP操作代码缓存。

有兴趣的话可以多了解一下。官方介绍:http://eaccelerator.net/

X Cache

X Cache 是一个快速稳定的 PHP 动作代码缓存。

有兴趣的话可以多了解一下。官方介绍:http://xcache.lighttpd.net/

总结

文章主要介绍浏览器缓存、文件缓存、NoSQL缓存、WEB服务器缓存、Opcode缓存。

所有类型的缓存都可以深入研究,从介绍->安装->使用->应用场景总结。

大家可以想想。通过上面的介绍,我们在工作中都用到了哪些缓存呢?

我们还可以使用哪些其他缓存来帮助我们的项目?

缓存常见问题

如果你使用过缓存,你一定经历过数据一致性、雪崩、热点数据缓存、缓存监控等令人头疼的问题。

我列出了一些问题。你,只是为了吸引眼球。

如果我们在项目中使用缓存,我们应该选择Redis还是Memcached?为什么?

回忆一些场景:

1。例如,实现简单的日志收集功能或者发送大量的短信和电子邮件。实现方式是先将数据收集到队列中,然后运行定时任务来消费和处理队列。去做。

直接使用Redis的lpush、rpop或者rpush、lpop函数。

//行内

$redis->lpush(key, value);

//行外

$redis->rpop(key);♶M没有这个数据结构。

2。例如,如果我们要存储ID、姓名、电话号码、年龄、身高等用户数据,我们如何存储呢?

1。 option: key => value

key = user_id of user_data

value = json_encode (user_data)

,然后先执行查询 j。

2。选项:hash

key = 用户数据的用户ID

hashKey = name, value = xx

hashKey = xyy = 电话号码,值 = xx

hashKey =高度,值=xx

查询时,取出钥匙即可。

//新增

$redis->hSet(key, hashKey, value);

$redis->hSet(key, hashKey, value);

$redis->hSet(key, hashKey, value);

//编辑

$redis->hSet(key, hashKey, value);

//查询

$redis->hGetAll(key); //请求所有属性

$redis->hGet(key, hashKey); //查询某个属性

选项2比选项1好。

3。例如,社交项目类似于新浪微博、个人中心关注列表和粉丝列表、双向关注列表、热门微博、消息订阅等。雷迪斯。

4。 Memcached仅存储在内存中,而Redis可以存储在内存中,也可以持久化到磁盘。

如果需求中的数据必须保留,则选择Redis。

我在工作中没有使用Memcached。 Memcached 通过查询数据来分配内存比 Redis 更好。

默认情况下,Memcached 使用磁盘分配机制来管理内存。根据预定的大小,将分配的内存分成固定长度的块来存储适当长度的键值数据记录,彻底解决内存碎片问题。

如何保证缓存和数据库数据的一致性?

添加新数据:先添加到数据库,然后添加到缓存。

编辑数据:先删除缓存数据,然后修改数据库中的数据,最后添加到缓存中。

删除数据:先删除缓存数据,再删除数据库中的数据。

查询数据:先查询缓存数据,如果没有则查询数据库,然后添加到缓存中。

强一致性很难保证,比如事务一致性、时间一致性、最终一致性等。

我们来具体分析一下具体问题。

缓存入侵怎么办?

用户请求缓存中不存在的数据,所以请求直接到数据库。

1. 设置正常的键值,首先检查键是否符合规范。

2.接口限流、降级、断路器,请学习istio:https://istio.io/

3.布隆过滤器。

4。为不存在的键值设置空缓存和过期时间。当存储层创建数据时,及时更新缓存。

遇到雪崩怎么办?

1. 互斥锁,只允许一个请求重建索引,其他请求等待缓存重建完成,重新从缓存中取出数据。

PHP 缓存技术:浏览器、数据文件、WEB服务器…

2.双缓存策略,原始缓存和副本缓存。当原始缓存过期并且请求复制缓存时,原始缓存被设置为短过期,而复制缓存被设置为长过期。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门