Table des matières
Vue d'ensemble
Cache du navigateur
Cache fort
Négocier le cache
L'impact du comportement des opérations de l'utilisateur sur le cache
Cache de fichiers
Cache de fichiers de données" >Cache de fichiers de données
Statisation de l'ensemble du site" >Statisation de l'ensemble du site
La différence entre Memcache et Memcached" >La différence entre Memcache et Memcached
WEB服务器缓存
Opcode缓存
APC缓存" >APC缓存
eAccelerator" >eAccelerator
XCache
关于缓存的常见问题
如何保证,缓存与数据库的数据一致性?
Que faire en cas de pénétration du cache ?
Que faire en cas d'avalanche ?
Maison développement back-end tutoriel php Explication systématique de la technologie de mise en cache PHP

Explication systématique de la technologie de mise en cache PHP

Dec 29, 2022 pm 02:40 PM
php

Cet article vous apporte des connaissances pertinentes sur PHP, qui présentent principalement le contenu pertinent de la technologie de mise en cache. La mise en cache est devenue un élément indispensable du projet et constitue le meilleur moyen d'améliorer les performances. Examinons-le ensemble, j'espère que cela vous aidera. tout le monde.

Explication systématique de la technologie de mise en cache PHP

Vue d'ensemble

Explication systématique de la technologie de mise en cache PHP

La mise en cache est devenue un élément essentiel du projet. C'est le meilleur moyen d'améliorer les performances, comme la réduction des E/S réseau, la réduction des E/S disque, etc. La vitesse de chargement du projet devient plus rapide.

Le cache peut être un cache CPU, un cache mémoire, un cache disque dur. Les différentes vitesses de requête du cache sont également différentes (le cache CPU est meilleur que le cache mémoire que le cache disque dur).

Ensuite, je vous les présenterai un par un.

Cache du navigateur

Le navigateur stocke la page demandée dans le cache client. Lorsque le visiteur visite à nouveau cette page, le navigateur peut lire les données directement à partir du cache client, réduisant ainsi l'accès au serveur, accélérant la vitesse de chargement de. pages Web.

Cache fort

Les requêtes envoyées par les utilisateurs sont obtenues directement à partir du cache client sans demander au serveur.

Déterminez si le cache fort est atteint en fonction de l'expiration et du contrôle du cache.

Le code est le suivant :

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

Cache-Control Vous pouvez également définir les paramètres suivants :

  • public : peut être mis en cache par tous les utilisateurs (navigateur de l'utilisateur final/serveur CDN)

  • private : ne peut être mis en cache que par être mis en cache par les utilisateurs finaux Cache du navigateur

  • no-cache : Ne pas utiliser le cache local

  • no-store : Désactiver la mise en cache des données

Négocier le cache

La requête envoyée par l'utilisateur est envoyée au serveur, et le serveur détermine s'il doit utiliser le cache côté client.

Le code est le suivant :

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

L'impact du comportement des opérations de l'utilisateur sur le cache

Explication systématique de la technologie de mise en cache PHP

Cache de fichiers

Cache de fichiers de données

Cache les données avec une faible fréquence de mise à jour et une fréquence de lecture élevée dans les fichiers.

Par exemple, si les données de la ville sont utilisées pour une liaison à trois niveaux à plusieurs endroits du projet, nous pouvons mettre en cache les données de la ville dans un fichier (city_data.json), et JS peut lire directement ce fichier sans demander au back-end serveur.

Statisation de l'ensemble du site

CMS (système de gestion de contenu), peut-être que tout le monde le connaît, comme les premiers DEDE et PHPCMS, le HTML statique peut être défini en arrière-plan lorsque les utilisateurs visitent le site Web. read est un HTML statique qui n'a pas besoin de demander à la base de données principale ou à Ajax de demander l'interface de données, ce qui accélère la vitesse de chargement du site Web. Le HTML statique présente les avantages suivants :

CDN (réseau de diffusion de contenu ) réseau de diffusion de contenu.

Lorsque les utilisateurs visitent le site Web, le contenu du nœud CDN le plus proche est automatiquement sélectionné sans demander au serveur source, ce qui accélère l'ouverture du site Web.
  • Le cache comprend principalement des ressources statiques telles que HTML, images, CSS, JS, XML, etc.

    NoSQL Cache
  • Memcached Cache

    Memcached est un serveur de cache de mémoire distribuée hautes performances.
  • L'objectif général de l'utilisation est d'augmenter la vitesse et l'évolutivité des applications Web dynamiques en mettant en cache les résultats des requêtes de base de données et en réduisant le nombre d'accès à la base de données.

    Il peut également être utilisé pour stocker des données dans divers formats, notamment des images, des vidéos, des fichiers, etc.
Memcached ne prend en charge que les données de type K/V et ne prend pas en charge le stockage persistant.

La différence entre Memcache et Memcached

Memcached à partir de 0.2.0 nécessite la version PHP >=5.2.0, Memcache nécessite la version PHP >=4.3.

Memcached a été publié pour la dernière fois le 24/12/2018 et Memcache a été publié pour la dernière fois le 07/04/2013.

Memcached est basé sur libmemcached et Memcache est basé sur l'extension PECL.

Vous pouvez considérer Memcached comme une version améliorée de Memcache.

Manuel d'utilisation PHP Memcached :

http://www.php.net/manual/zh/book.memcached.php

Memcached est souvent comparé à Redis. Ensuite, nous présenterons le cache Redis.

Redis Cache

Redis est une base de données K/V hautes performances.

Redis compense largement les lacunes du stockage Memcached K/V, telles que List (liste liée), Set (set), Zset (ensemble ordonné), Hash (hash), qui peut stocker des données en mémoire ou les données peuvent être conservées. sur le disque et prend en charge la synchronisation maître-esclave.

De manière générale, Redis peut être considéré comme une version étendue de Memcached, plus lourde et plus puissante.

Redis est principalement utilisé dans le travail quotidien.

Site Web d'apprentissage Redis : http://www.redis.cn/

Cache MongoDB

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

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

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

MongoDB 学习网址:http://www.mongodb.org.cn

WEB服务器缓存

Apache缓存

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

打开 http.conf,开启模块:

LoadModule expires_module modules/mod_expires.so
Copier après la connexion

指定缓存的过期时间:

<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>
Copier après la connexion

Nginx缓存

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

打开 nginx.conf :

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

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

Opcode缓存

Opcode(Operate Code)操作码。

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

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

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

APC缓存

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

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

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

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

感兴趣可以了解下,官方介绍:http://php.net/manual/zh/book.apc.php

eAccelerator

eAccelerator:A PHP opcode cache。

感兴趣可以了解下,官方介绍:http://eaccelerator.net/

XCache

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

感兴趣可以了解下,官方介绍:http://xcache.lighttpd.net/

小结

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

每一种缓存都可以深入研究,从介绍 -> 安装 -> 使用 -> 总结应用场景。

大家可以思考下,通过上面的介绍,工作中我们使用了哪些缓存?

还可以再使用哪些缓存,可以对我们的项目有帮助?

关于缓存的常见问题

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

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

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

举一些场景:

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

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

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

二、比如我们要存储用户信息,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); //查询某个属性
Copier après la connexion

方案二 优于 方案一。

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

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

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

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

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

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

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

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

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

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

Requête de données : interrogez d'abord les données du cache, s'il n'y en a pas, puis interrogez la base de données, puis ajoutez-la au cache.

Une cohérence forte est difficile à garantir, comme la cohérence des transactions, la cohérence à un moment donné, la cohérence éventuelle, etc.

Analysons des problèmes spécifiques en détail.

Que faire en cas de pénétration du cache ?

L'utilisateur demande des données qui n'existent pas dans le cache, ce qui fait que la requête tombe directement sur la base de données.

1. Définissez une valeur de clé normale et vérifiez d'abord si la clé est conforme à la spécification.

2. Pour la limitation du courant d'interface, le déclassement et le disjoncteur, veuillez étudier istio : https://istio.io/

3.

4. Définissez un cache vide et un délai d'expiration pour les valeurs de clé inexistantes. Si la couche de stockage crée des données, mettez à jour le cache en temps opportun.

Que faire en cas d'avalanche ?

1. Le verrouillage Mutex, autorise une seule requête pour reconstruire l'index, les autres requêtes attendent que la reconstruction du cache soit terminée et ré-obtiennent les données du cache.

Explication systématique de la technologie de mise en cache PHP

2. Stratégie de double cache, cache d'origine et cache de copie Lorsque le cache d'origine échoue, le délai d'expiration du cache d'origine est défini sur court terme et le cache de copie est défini sur long terme. terme.

Apprentissage recommandé : "Tutoriel vidéo PHP"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Date et heure de CakePHP Date et heure de CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler avec la date et l'heure dans cakephp4, nous allons utiliser la classe FrozenTime disponible.

Discuter de CakePHP Discuter de CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP est un framework open source pour PHP. Il vise à faciliter grandement le développement, le déploiement et la maintenance d'applications. CakePHP est basé sur une architecture de type MVC à la fois puissante et facile à appréhender. Modèles, vues et contrôleurs gu

Téléchargement de fichiers CakePHP Téléchargement de fichiers CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler sur le téléchargement de fichiers, nous allons utiliser l'assistant de formulaire. Voici un exemple de téléchargement de fichiers.

CakePHP créant des validateurs CakePHP créant des validateurs Sep 10, 2024 pm 05:26 PM

Le validateur peut être créé en ajoutant les deux lignes suivantes dans le contrôleur.

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

Guide rapide CakePHP Guide rapide CakePHP Sep 10, 2024 pm 05:27 PM

CakePHP est un framework MVC open source. Cela facilite grandement le développement, le déploiement et la maintenance des applications. CakePHP dispose d'un certain nombre de bibliothèques pour réduire la surcharge des tâches les plus courantes.

Comment analysez-vous et traitez-vous HTML / XML dans PHP? Comment analysez-vous et traitez-vous HTML / XML dans PHP? Feb 07, 2025 am 11:57 AM

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

See all articles