Table des matières
Cache du navigateur
Strong Cache
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
Statique pour l'ensemble du site
Cache CDN
NoSQL Cache
Memcached Cache
Redis Cache
MongoDB Cache
WEB服务器缓存
Apache缓存
Nginx缓存
Opcode缓存
APC缓存
eAccelerator
XCache
小结
关于缓存的常见问题
当项目中使用到缓存,我们是选择 Redis 还是 Memcached ,为什么?
如何保证,缓存与数据库的数据一致性?
Que faire en cas de pénétration du cache ?
Que faire en cas d'avalanche ?
Maison développement back-end tutoriel php En savoir plus sur la technologie de mise en cache en PHP

En savoir plus sur la technologie de mise en cache en PHP

Jul 14, 2021 pm 07:24 PM
php 缓存 高性能

La mise en cache est devenue un élément essentiel du projet, et c'est le meilleur moyen d'améliorer les performances. L'article suivant vous amènera à en apprendre davantage sur la technologie de mise en cache en PHP.

En savoir plus sur la technologie de mise en cache en PHP

La mise en cache 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., ce qui accélère le chargement des projets.

Le cache peut être un cache CPU, un cache mémoire, un cache disque dur et différentes vitesses de requête de cache sont différentes (Cache CPU > Cache mémoire > 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 la charge sur l'accès au serveur. le chargement des pages Web.

Strong Cache

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 Cache du navigateur de l'utilisateur final
  • no-cache : ne pas utiliser le cache local
  • no-store : désactiver la mise en cache des données

Négocier le cache

Les requêtes envoyées par les utilisateurs sont envoyées au serveur, et le serveur détermine si pour utiliser le cache 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

En savoir plus sur la technologie de mise en cache en 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.

Statique pour 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 :

  • Facile à l'inclusion dans les moteurs de recherche (SEO)
  • Ouverture rapide des pages
  • Réduit la charge du serveur

Cache CDN

Réseau de distribution de contenu CDN (Content Delivery Network).

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 mémoire distribué 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.

En général, Redis peut être considéré comme une version étendue de Memcached, plus lourde et plus puissante.

Redis est principalement utilisé dans le travail quotidien.

MongoDB Cache

MongoDB est une base de données basée sur le stockage de fichiers distribués. Écrit en langage C++.

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

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

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

大家也可以了解下:proxy_cache_path 和 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);
Copier après la connexion

Memcached 没有这种数据结构。

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

方案一:key => value

key = user_data_用户ID

value = json_encode(用户数据)

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

方案二:hash

key = user_data_用户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数据记录,以完全解决内存碎片问题。

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

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

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

Supprimer les données : supprimez d'abord les données du cache, puis supprimez les données de la base de données.

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 : 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.

2. Stratégie de double cache, cache d'origine et cache de copie Lorsque le cache d'origine expire et qu'un cache de copie est demandé, 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.

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)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
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.

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

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

7 fonctions PHP que je regrette de ne pas connaître auparavant 7 fonctions PHP que je regrette de ne pas connaître auparavant Nov 13, 2024 am 09:42 AM

Si vous êtes un développeur PHP expérimenté, vous aurez peut-être le sentiment d'y être déjà allé et de l'avoir déjà fait. Vous avez développé un nombre important d'applications, débogué des millions de lignes de code et peaufiné de nombreux scripts pour réaliser des opérations.

Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Apr 05, 2025 am 12:04 AM

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Programme PHP pour compter les voyelles dans une chaîne Programme PHP pour compter les voyelles dans une chaîne Feb 07, 2025 pm 12:12 PM

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

Expliquez la liaison statique tardive en PHP (statique: :). Expliquez la liaison statique tardive en PHP (statique: :). Apr 03, 2025 am 12:04 AM

Liaison statique (statique: :) ​​implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Apr 03, 2025 am 12:03 AM

Quelles sont les méthodes magiques de PHP? Les méthodes magiques de PHP incluent: 1. \ _ \ _ Construct, utilisé pour initialiser les objets; 2. \ _ \ _ Destruct, utilisé pour nettoyer les ressources; 3. \ _ \ _ Appel, gérer les appels de méthode inexistants; 4. \ _ \ _ GET, Implémentez l'accès à l'attribut dynamique; 5. \ _ \ _ SET, Implémentez les paramètres d'attribut dynamique. Ces méthodes sont automatiquement appelées dans certaines situations, améliorant la flexibilité et l'efficacité du code.

See all articles