我的编程空间,编程开发者的网络收藏夹
学习永远不晚

PHP缓存技术是什么及怎么使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

PHP缓存技术是什么及怎么使用

这篇文章主要介绍“PHP缓存技术是什么及怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“PHP缓存技术是什么及怎么使用”文章能帮助大家解决问题。

概述

PHP缓存技术是什么及怎么使用

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

缓存可以是CPU缓存、内存缓存、硬盘缓存,不同的缓存查询速度也不一样(CPU缓存 优于 内存缓存 优于 硬盘缓存)。

浏览器缓存

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

强缓存

用户发送的请求,直接从客户端缓存中获取,不请求服务器。

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

代码如下:

header('Expires: '. gmdate('D, d M Y H:i:s', time() + 3600). ' GMT');
header("Cache-Control: max-age=3600"); //有效期3600秒

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

  • public:可以被所有的用户缓存(终端用户的浏览器/CDN服务器)

  • private:只能被终端用户的浏览器缓存

  • no-cache:不使用本地缓存

  • no-store:禁止缓存数据

协商缓存

用户发送的请求,发送给服务器,由服务器判定是否使用客户端缓存。

代码如下:

$last_modify = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']);
if (time() - $last_modify < 3600) {
   header('Last-Modified: '. gmdate('D, d M Y H:i:s', $last_modify).' GMT');
   header('HTTP/1.1 304'); //Not Modified
   exit;
}
header('Last-Modified: '. gmdate('D, d M Y H:i:s').' GMT');

用户操作行为对缓存的影响

PHP缓存技术是什么及怎么使用

文件缓存

数据文件缓存

将更新频率低,读取频率高的数据,缓存成文件。

比如,项目中多个地方用到城市数据做三级联动,我们就可以将城市数据缓存成一个文件(city_data.json),JS 可以直接读取这个文件,无需请求后端服务器。

全站静态化

CMS(内容管理系统),也许大家都比较熟悉,比如早期的 DEDE、PHPCMS,后台都可以设置静态化HTML,用户在访问网站的时候读取的都是静态HTML,不用请求后端的数据库,也不用Ajax请求数据接口,加快了网站的加载速度。

静态化HTML有以下优点:

  • 有利于搜索引擎的收录(SEO)

  • 页面打开速度快

  • 减少服务器负担

CDN缓存

CDN(Content Delivery Network)内容分发网络。

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

缓存主要包括 HTML、图片、CSS、JS、XML 等静态资源。

NoSQL缓存

Memcached 缓存

Memcached 是高性能的分布式内存缓存服务器。

一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。

它也能够用来存储各种格式的数据,包括图像、视频、文件等。

Memcached 仅支持K/V类型的数据,不支持持久化存储。

Memcache 与 Memcached 的区别

Memcached 从0.2.0开始,要求PHP版本>=5.2.0,Memcache 要求PHP版本>=4.3。

Memcached 最后发布时间为2018-12-24,Memcache 最后发布时间2013-04-07。

Memcached 基于libmemcached,Memcache 基于PECL扩展。

可以将 Memcached 看作是 Memcache 的升级版。

Memcached 经常拿来与 Redis 做对比,接下来介绍下 Redis 缓存。

Redis缓存

Redis 是一个高性能的 K/V 数据库。

Redis 很大程度补偿了 Memcached K/V存储的不足,比如 List(链表)、Set(集合)、Zset(有序集合)、Hash(散列),既可以将数据存储在内存中,也可以将数据持久化到磁盘上,支持主从同步。

总的来说,可以将 Redis 看作是 Memcached 的扩展版,更加重量级,功能更强大。

Redis 在日常工作中使用的居多。

MongoDB缓存

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。

旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

WEB服务器缓存

Apache缓存

利用 mod_expires ,指定缓存的过期时间,可以缓存HTML、图片、JS、CSS 等。

打开 http.conf,开启模块:

LoadModule expires_module modules/mod_expires.so

指定缓存的过期时间:

<IfModule expires_module>
    #打开缓存
    ExpiresActive on
    #css缓存(8640000秒=10天)
    ExpiresByType text/css A8640000
    #js缓存
    ExpiresByType application/x-javascript A8640000
    ExpiresByType application/javascript A8640000
    #html缓存
    ExpiresByType text/html A8640000
    #图片缓存
    ExpiresByType image/jpeg A8640000
    ExpiresByType image/gif A8640000
    ExpiresByType image/png A8640000
    ExpiresByType image/x-icon A8640000
</IfModule>

Nginx缓存

利用 expire 参数,指定缓存的过期时间,可以缓存HTML、图片、JS、CSS 等。

打开 nginx.conf :

//以图片为例:
location ~\.(gif|jpg|jepg|png|bmp|ico)$ { #加入新的location
   root html;
   expires 1d; #指定缓存时间
}

大家也可以了解下:proxycachepath 和 proxy_cache,进行缓存的设置。

Opcode缓存

Opcode(Operate Code)操作码。

PHP程序运行完后,马上释放所有内存,所有程序中的变量都销毁,每次请求都要重新翻译、执行,导致速度可能会偏慢。

当解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码,也称为操作码。

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

APC缓存

APC(Alternative PHP Cache)可选 PHP 缓存。

APC 的目标是提供一个自由、 开放,和健全的框架,用于缓存、优化 PHP 中间代码。

APC 可以去掉 php 动态解析以及编译的时间,使php脚本可以执行的更快。

APC 扩展最后的发布时间为 2012-09-03。

eAccelerator

eAccelerator:A PHP opcode cache。

XCache

XCache 是一个又快又稳定的 PHP opcode 缓存器。

关于缓存的常见问题

用过缓存,大家肯定遇到过比较头痛的问题,比如数据一致性,雪崩,热点数据缓存,缓存监控等等。

给大家列出几个问题,纯属抛转引玉。

当项目中使用到缓存,我们是选择 Redis 还是 Memcached ,为什么?

举一些场景:

一、比如实现一个简单的日志收集功能或发送大量短信、邮件的功能,实现方式是先将数据收集到队列中,然后有一个定时任务去消耗队列,处理该做的事情。

直接使用 Redis 的 lpush,rpop 或 rpush,lpop。

//进队列
$redis->lpush(key, value);
//出队列
$redis->rpop(key);
Memcached 没有这种数据结构。

二、比如我们要存储用户信息,ID、姓名、电话、年龄、身高 ,怎么存储?

方案一:key => value

key = userdata用户ID

value = json_encode(用户数据)

查询时,先取出key,然后进行json_decode解析。

方案二:hash

key = userdata用户ID

hashKey = 姓名,value = xx

hashKey = 电话,value = xx

hashKey = 年龄,value = xx

hashKey = 身高,value = xx

查询时,取出key即可。

//新增
$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); //查询某个属性

方案二 优于 方案一。

三、比如社交项目类似于新浪微博,个人中心的关注列表和粉丝列表,双向关注列表,还有热门微博,还有消息订阅 等等。

以上都用 Redis 提供的相关数据结构即可。

四、Memcached 只存储在内存中,而 Redis 既可以存储在内存中,也可以持久化到磁盘上。

如果需求中的数据需要持久化,请选择 Redis 。

个人在工作中没有用到 Memcached ,通过查询资料得到 Memcached 内存分配时优于 Redis。

Memcached 默认使用 Slab Allocation 机制管理内存,按照预先规定的大小,将分配的内存分割成特定长度的块以存储相应长度的key-value数据记录,以完全解决内存碎片问题。

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

新增数据:先新增到数据库,再新增到缓存。

编辑数据:先删除缓存数据,再修改数据库中数据,再新增到缓存。

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

查询数据:先查询缓存数据,没有,再查询数据库,再新增到缓存。

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

具体问题具体分析吧。

缓存穿透怎么办?

用户请求缓存中不存在的数据,导致请求直接落在数据库上。

一、设置有规则的Key值,先验证Key是否符合规范。

二、接口限流、降级、熔断。

三、布隆过滤器。

四、为不存在的key值,设置空缓存和过期时间,如果存储层创建了数据,及时更新缓存。

雪崩怎么办?

一、互斥锁,只允许一个请求去重建索引,其他请求等待缓存重建执行完,重新从缓存获取数据。

PHP缓存技术是什么及怎么使用

二、双缓存策略,原始缓存和拷贝缓存,当原始缓存失效请求拷贝缓存,原始缓存失效时间设置为短期,拷贝缓存设置为长期。

关于“PHP缓存技术是什么及怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

PHP缓存技术是什么及怎么使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

PHP缓存技术是什么及怎么使用

这篇文章主要介绍“PHP缓存技术是什么及怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“PHP缓存技术是什么及怎么使用”文章能帮助大家解决问题。概述缓存已经成了项目中是必不可少的一部分,它是提
2023-07-04

PHP中的缓存技术是什么

本篇内容介绍了“PHP中的缓存技术是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、缓存是提高性能最好的方式,例如减少网络I/O、减少
2023-06-20

Java缓存技术怎么使用

这篇文章主要介绍“Java缓存技术怎么使用”,在日常操作中,相信很多人在Java缓存技术怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java缓存技术怎么使用”的疑惑有所帮助!接下来,请跟着小编一起来
2023-06-05

PHP中的缓存技术有什么用

这篇文章主要讲解了“PHP中的缓存技术有什么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP中的缓存技术有什么用”吧!缓存是提高性能最好的方式,例如减少网络I/O、减少磁盘I/O 等,
2023-06-20

什么是数据缓存技术?

数据缓存技术是一种通过存储常用数据副本来提升数据访问速度的计算机优化技术,广泛应用于操作系统、数据库、Web服务器和移动应用程序中。它识别并存储经常访问的数据,当应用程序需要访问时优先从高速缓存中检索,减少访问延迟,提高吞吐量和资源利用率。但需要注意缓存不一致性、内存占用和管理开销的问题。最佳实践包括正确识别缓存数据、选择合适的缓存类型、管理缓存失效、监控缓存性能和权衡成本收益。
什么是数据缓存技术?
2024-04-02

PHP中怎么实现缓存技术

这篇文章主要为大家展示了“PHP中怎么实现缓存技术”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“PHP中怎么实现缓存技术”这篇文章吧。1、全页面静态化缓存也就是将页面全部生成html静态页面,用
2023-06-16

php缓存技术和静态化的特点是什么

PHP缓存技术和静态化的特点如下:PHP缓存技术的特点:提高网站性能:通过缓存PHP脚本的执行结果,减少数据库查询和服务器负载,从而加快网站的响应速度。减少数据库访问:缓存技术可以避免频繁地查询数据库,从而减少数据库的负载,提高网站的并发
2023-10-27

域名缓存侦测技术有什么用

这篇文章将为大家详细讲解有关域名缓存侦测技术有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 域名缓存侦测(DNS Cache Snooping)技术在企业网络中,通常都会配置DNS服务器,为网络内
2023-06-04

php缓存怎么使用

本篇内容介绍了“php缓存怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一个网站或者一个应用的标准流程是浏览器向应用服务器发出请求,
2023-06-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录