suchen
HeimBackend-EntwicklungPHP-TutorialSystematische Erklärung der PHP-Caching-Technologie

Dieser Artikel vermittelt Ihnen relevantes Wissen über PHP, das hauptsächlich den relevanten Inhalt der Caching-Technologie vorstellt, der zu einem unverzichtbaren Bestandteil des Projekts geworden ist und der beste Weg ist, die Leistung gemeinsam zu verbessern alle.

Systematische Erklärung der PHP-Caching-Technologie

Übersicht

Systematische Erklärung der PHP-Caching-Technologie

Caching ist zu einem wesentlichen Bestandteil des Projekts geworden, um die Leistung zu verbessern, z. B. die Netzwerk-E/A zu reduzieren, die Festplatten-E/A zu reduzieren usw Die Ladegeschwindigkeit des Projekts wird schneller.

Cache kann CPU-Cache, Speicher-Cache, Festplatten-Cache sein. Unterschiedliche Cache-Abfragegeschwindigkeiten sind ebenfalls unterschiedlich (CPU-Cache ist besser als Speicher-Cache als Festplatten-Cache).

Als nächstes werde ich sie euch einzeln vorstellen.

Browser-Cache

Der Browser speichert die angeforderte Seite im Client-Cache. Wenn der Besucher diese Seite erneut besucht, kann der Browser die Daten direkt aus dem Client-Cache lesen, wodurch der Zugriff auf den Server verringert wird Webseiten.

Starker Cache

Anfragen, die von Benutzern gesendet werden, werden direkt aus dem Client-Cache abgerufen, ohne den Server anzufordern.

Bestimmen Sie anhand von Ablaufdatum und Cache-Kontrolle, ob der starke Cache betroffen ist.

Der Code lautet wie folgt:

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

Cache-Control Sie können auch die folgenden Parameter festlegen:

  • öffentlich: kann von allen Benutzern zwischengespeichert werden (Browser/CDN-Server des Endbenutzers)

  • privat: nur möglich von Endbenutzern zwischengespeichert werden Browser-Cache

  • no-cache: Lokalen Cache nicht verwenden

  • no-store: Zwischenspeicherung von Daten deaktivieren

Cache aushandeln

Die vom Benutzer gesendete Anfrage wird an die gesendet Server, und der Server bestimmt, ob der clientseitige Cache verwendet werden soll.

Der Code lautet wie folgt:

$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;);

Die Auswirkung des Benutzerbetriebsverhaltens auf den Cache

Systematische Erklärung der PHP-Caching-Technologie

Datei-Cache

Datendatei-Cache

Zwischenspeichern von Daten mit geringer Aktualisierungshäufigkeit und hoher Lesehäufigkeit in Dateien.

Wenn beispielsweise Stadtdaten an mehreren Stellen im Projekt für die dreistufige Verknüpfung verwendet werden, können wir die Stadtdaten in einer Datei (city_data.json) zwischenspeichern und JS kann diese Datei direkt lesen, ohne das Back-End anzufordern Server.

Statisch für die gesamte Website

CMS (Content Management System), vielleicht kennt es jeder, wie zum Beispiel das frühe DEDE und PHPCMS, das im Hintergrund eingestellt werden kann, wenn Benutzer die Website besuchen read ist statisches HTML und muss weder die Back-End-Datenbank noch Ajax anfordern, um die Datenschnittstelle anzufordern, was die Ladegeschwindigkeit der Website beschleunigt.

Statisches HTML hat folgende Vorteile:

  • Fördert die Einbindung in Suchmaschinen (SEO)

  • Schnelles Öffnen der Seite

  • Reduziert die Serverlast

CDN-Cache

CDN (Content Delivery Network ) Content-Delivery-Netzwerk.

Wenn Benutzer die Website besuchen, wird der Inhalt des nächstgelegenen CDN-Knotens automatisch ausgewählt, ohne den Quellserver anzufordern, was das Öffnen der Website beschleunigt.

Der Cache enthält hauptsächlich statische Ressourcen wie HTML, Bilder, CSS, JS, XML usw.

NoSQL Cache

Memcached Cache

Memcached ist ein leistungsstarker verteilter Speicher-Cache-Server.

Der allgemeine Verwendungszweck besteht darin, die Geschwindigkeit und Skalierbarkeit dynamischer Webanwendungen zu erhöhen, indem Datenbankabfrageergebnisse zwischengespeichert und die Anzahl der Datenbankzugriffe reduziert werden.

Es kann auch zum Speichern von Daten in verschiedenen Formaten verwendet werden, einschließlich Bildern, Videos, Dateien usw.

Memcached unterstützt nur Daten vom Typ K/V und keinen dauerhaften Speicher.

Der Unterschied zwischen Memcache und Memcached

Memcached ab 0.2.0 erfordert eine PHP-Version >=5.2.0, Memcache erfordert eine PHP-Version >=4.3.

Memcached wurde zuletzt am 24.12.2018 und Memcache zuletzt am 07.04.2013 veröffentlicht.

Memcached basiert auf libmemcached und Memcache basiert auf der PECL-Erweiterung.

Sie können sich Memcached als eine aktualisierte Version von Memcache vorstellen.

PHP Memcached-Benutzerhandbuch:

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

Memcached wird oft mit Redis verglichen. Als nächstes stellen wir den Redis-Cache vor.

Redis Cache

Redis ist eine leistungsstarke K/V-Datenbank.

Redis gleicht die Mängel des Memcached-K/V-Speichers weitgehend aus, z. B. Liste (verknüpfte Liste), Set (Satz), Zset (geordneter Satz), Hash (Hash), mit denen Daten im Speicher gespeichert oder gespeichert werden können auf die Festplatte und unterstützt die Master-Slave-Synchronisation.

Im Allgemeinen kann Redis als erweiterte Version von Memcached betrachtet werden, die schwerer und leistungsfähiger ist.

Redis wird hauptsächlich in der täglichen Arbeit verwendet.

Redis-Lernwebsite: http://www.redis.cn/

MongoDB-Cache

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

指定缓存的过期时间:

<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。

感兴趣可以了解下,官方介绍: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 没有这种数据结构。

二、比如我们要存储用户信息,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数据记录,以完全解决内存碎片问题。

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

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

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

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

Daten abfragen: Fragen Sie zuerst die Cache-Daten ab. Wenn keine vorhanden sind, fragen Sie dann die Datenbank ab und fügen Sie sie dann dem Cache hinzu.

Eine starke Konsistenz ist schwer zu garantieren, z. B. Transaktionskonsistenz, Zeitpunktkonsistenz, letztendliche Konsistenz usw.

Lassen Sie uns die spezifischen Probleme im Detail analysieren.

Was tun gegen Cache-Penetration?

Der Benutzer fordert Daten an, die nicht im Cache vorhanden sind, wodurch die Anfrage direkt in der Datenbank landet.

1. Legen Sie einen regulären Schlüsselwert fest und überprüfen Sie zunächst, ob der Schlüssel der Spezifikation entspricht.

2. Informationen zur Schnittstellenstrombegrenzung, zum Downgrade und zum Leistungsschalter finden Sie unter istio: https://istio.io/

3.

4. Legen Sie einen leeren Cache und eine Ablaufzeit für nicht vorhandene Schlüsselwerte fest. Wenn die Speicherschicht Daten erstellt, aktualisieren Sie den Cache rechtzeitig.

Was tun bei Lawinenabgang?

1. Mutex-Sperre, nur eine Anfrage darf den Index neu erstellen, andere Anfragen warten auf den Abschluss der Cache-Rekonstruktion und rufen erneut Daten aus dem Cache ab.

Systematische Erklärung der PHP-Caching-Technologie

2. Doppelte Cache-Strategie, Original-Cache und Kopier-Cache. Wenn der Original-Cache ausfällt, wird die Ablaufzeit des Original-Cache auf „Kurzfristig“ und der Kopie-Cache auf „Langzeit“ eingestellt. Begriff.

Empfohlenes Lernen: „PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonSystematische Erklärung der PHP-Caching-Technologie. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Dieser Artikel ist reproduziert unter:新亮笔记微信公众号. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Zweck von PHP: Erstellen dynamischer WebsitesZweck von PHP: Erstellen dynamischer WebsitesApr 15, 2025 am 12:18 AM

PHP wird verwendet, um dynamische Websites zu erstellen. Zu den Kernfunktionen gehören: 1. Dynamische Inhalte generieren und Webseiten in Echtzeit generieren, indem Sie eine Verbindung mit der Datenbank herstellen; 2. Verarbeiten Sie Benutzerinteraktions- und Formulareinreichungen, überprüfen Sie Eingaben und reagieren Sie auf Operationen. 3. Verwalten Sie Sitzungen und Benutzerauthentifizierung, um eine personalisierte Erfahrung zu bieten. 4. Optimieren Sie die Leistung und befolgen Sie die Best Practices, um die Effizienz und Sicherheit der Website zu verbessern.

PHP: Datenbanken und serverseitige Logik bearbeitenPHP: Datenbanken und serverseitige Logik bearbeitenApr 15, 2025 am 12:15 AM

PHP verwendet MySQLI- und PDO-Erweiterungen, um in Datenbankvorgängen und serverseitiger Logikverarbeitung zu interagieren und die serverseitige Logik durch Funktionen wie Sitzungsverwaltung zu verarbeiten. 1) Verwenden Sie MySQLI oder PDO, um eine Verbindung zur Datenbank herzustellen und SQL -Abfragen auszuführen. 2) Behandeln Sie HTTP -Anforderungen und Benutzerstatus über Sitzungsverwaltung und andere Funktionen. 3) Verwenden Sie Transaktionen, um die Atomizität von Datenbankvorgängen sicherzustellen. 4) Verhindern Sie die SQL -Injektion, verwenden Sie Ausnahmebehandlung und Schließen von Verbindungen zum Debuggen. 5) Optimieren Sie die Leistung durch Indexierung und Cache, schreiben Sie hochlesbarer Code und führen Sie die Fehlerbehandlung durch.

Wie verhindern Sie die SQL -Injektion in PHP? (Vorbereitete Aussagen, PDO)Wie verhindern Sie die SQL -Injektion in PHP? (Vorbereitete Aussagen, PDO)Apr 15, 2025 am 12:15 AM

Die Verwendung von Vorverarbeitungsanweisungen und PDO in PHP kann SQL -Injektionsangriffe effektiv verhindern. 1) Verwenden Sie PDO, um eine Verbindung zur Datenbank herzustellen und den Fehlermodus festzulegen. 2) Erstellen Sie Vorverarbeitungsanweisungen über die Vorbereitungsmethode und übergeben Sie Daten mit Platzhaltern und führen Sie Methoden aus. 3) Abfrageergebnisse verarbeiten und die Sicherheit und Leistung des Codes sicherstellen.

PHP und Python: Code Beispiele und VergleichPHP und Python: Code Beispiele und VergleichApr 15, 2025 am 12:07 AM

PHP und Python haben ihre eigenen Vor- und Nachteile, und die Wahl hängt von den Projektbedürfnissen und persönlichen Vorlieben ab. 1.PHP eignet sich für eine schnelle Entwicklung und Wartung großer Webanwendungen. 2. Python dominiert das Gebiet der Datenwissenschaft und des maschinellen Lernens.

PHP in Aktion: Beispiele und Anwendungen in realer WeltPHP in Aktion: Beispiele und Anwendungen in realer WeltApr 14, 2025 am 12:19 AM

PHP wird in E-Commerce, Content Management Systems und API-Entwicklung häufig verwendet. 1) E-Commerce: Wird für die Einkaufswagenfunktion und Zahlungsabwicklung verwendet. 2) Content -Management -System: Wird für die Erzeugung der dynamischen Inhalte und die Benutzerverwaltung verwendet. 3) API -Entwicklung: Wird für die erholsame API -Entwicklung und die API -Sicherheit verwendet. Durch Leistungsoptimierung und Best Practices werden die Effizienz und Wartbarkeit von PHP -Anwendungen verbessert.

PHP: Erstellen interaktiver Webinhalte mühelosPHP: Erstellen interaktiver Webinhalte mühelosApr 14, 2025 am 12:15 AM

PHP erleichtert es einfach, interaktive Webinhalte zu erstellen. 1) Generieren Sie Inhalte dynamisch, indem Sie HTML einbetten und in Echtzeit basierend auf Benutzereingaben oder Datenbankdaten anzeigen. 2) Verarbeitungsformularübermittlung und dynamische Ausgabe erzeugen, um sicherzustellen, dass HTMLSpecialChars zur Vorbeugung von XSS verwendet wird. 3) Verwenden Sie MySQL, um ein Benutzerregistrierungssystem zu erstellen und Anweisungen von Password_hash und Preprocessing vorzubereiten, um die Sicherheit zu verbessern. Durch die Beherrschung dieser Techniken wird die Effizienz der Webentwicklung verbessert.

PHP und Python: Vergleich von zwei beliebten ProgrammiersprachenPHP und Python: Vergleich von zwei beliebten ProgrammiersprachenApr 14, 2025 am 12:13 AM

PHP und Python haben jeweils ihre eigenen Vorteile und wählen nach den Projektanforderungen. 1.PHP ist für die Webentwicklung geeignet, insbesondere für die schnelle Entwicklung und Wartung von Websites. 2. Python eignet sich für Datenwissenschaft, maschinelles Lernen und künstliche Intelligenz mit prägnanter Syntax und für Anfänger.

Die dauerhafte Relevanz von PHP: Ist es noch am Leben?Die dauerhafte Relevanz von PHP: Ist es noch am Leben?Apr 14, 2025 am 12:12 AM

PHP ist immer noch dynamisch und nimmt immer noch eine wichtige Position im Bereich der modernen Programmierung ein. 1) Einfachheit und leistungsstarke Unterstützung von PHP machen es in der Webentwicklung weit verbreitet. 2) Seine Flexibilität und Stabilität machen es ausstehend bei der Behandlung von Webformularen, Datenbankoperationen und Dateiverarbeitung; 3) PHP entwickelt sich ständig weiter und optimiert, geeignet für Anfänger und erfahrene Entwickler.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

SecLists

SecLists

SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software

mPDF

mPDF

mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.