PHP のキャッシュ テクノロジの詳細については、こちらをご覧ください。
キャッシュはプロジェクトにとって不可欠な部分となっており、パフォーマンスを向上させる最善の方法です。次の記事では、PHP のキャッシュ テクノロジについて詳しく説明します。
キャッシュは、ネットワーク I/O の削減、ディスク I/O の削減など、プロジェクトの読み込みを高速化するなど、パフォーマンスを向上させるための最良の方法です。
キャッシュには CPU キャッシュ、メモリ キャッシュ、ハードディスク キャッシュがあり、キャッシュが異なればクエリ速度も異なります (CPU キャッシュ > メモリ キャッシュ > ハードディスク キャッシュ)。
次は一つずつ紹介していきます。
ブラウザ キャッシュ
ブラウザは、要求されたページをクライアント キャッシュに保存します。訪問者がこのページに再度アクセスすると、ブラウザは、ページからデータを読み取ることで直接アクセスできます。クライアント キャッシュにより、サーバーへのアクセスが軽減され、Web ページの読み込みが高速化されます。
強力なキャッシュ
ユーザーが送信したリクエストは、サーバーにリクエストせずにクライアント キャッシュから直接取得されます。
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');
ユーザー操作動作のキャッシュへの影響
データ ファイル キャッシュ
は、低い更新頻度と高い読み取り頻度でデータを更新します。ファイルにキャッシュします。
たとえば、プロジェクト内の複数の場所で都市データが 3 レベルの連携に使用されている場合、都市データをファイル (city_data.json) にキャッシュすることができ、JS はリクエストせずにこのファイルを直接読み取ることができます。バックエンドサーバー。
サイト全体で静的CMS (コンテンツ管理システム)、初期の DEDE や PHPCMS など、おそらく誰もがよく知っているもので、静的な HTML を設定できますユーザーが Web サイトにアクセスするとき、読み取られるのは静的な HTML だけです。バックエンド データベースや Ajax リクエスト データ インターフェイスをリクエストする必要がないため、Web サイトの読み込み速度が向上します。
静的 HTML には次の利点があります。
検索エンジンの組み込み (SEO) に役立ちます- ページがすぐに開きます
- サーバーの負荷
CDN (Content Delivery Network) コンテンツ配信ネットワーク。
ユーザーが Web サイトにアクセスすると、ソース サーバーに要求することなく、最も近い CDN ノードのコンテンツが自動的に選択されるため、Web サイトを開く時間が短縮されます。
キャッシュには主に、HTML、画像、CSS、JS、XML などの静的リソースが含まれます。
NoSQL CacheMemcached Cache
Memcached は、高性能の分散メモリ キャッシュ サーバーです。
使用の一般的な目的は、データベース クエリ結果をキャッシュすることでデータベース アクセスの数を減らし、動的 Web アプリケーションの速度とスケーラビリティを向上させることです。
画像、ビデオ、ファイルなど、さまざまな形式でデータを保存するために使用することもできます。
Memcached は K/V タイプのデータのみをサポートし、永続ストレージはサポートしません。
Memcache と Memcached の違い0.2.0 以降の Memcached には PHP バージョン >= 5.2.0 が必要で、Memcache には PHP バージョン >= 4.3 が必要です。
- Memcached の最終リリースは 2018-12-24 で、Memcache の最終リリースは 2013-04-07 です。
- Memcached は libmemcached に基づいており、Memcache は PECL 拡張に基づいています。 Memcached は、Memcache のアップグレードされたバージョンと考えることができます。
http://www.php.net/manual/zh/book.memcached.php
# # Memcached は Redis とよく比較されますが、次に Redis キャッシュについて紹介します。
Redis キャッシュ
Redis は、高性能 K/V データベースです。
Redis は、データをインメモリに保存できる List (リンク リスト)、Set (セット)、Zset (順序セット)、Hash (ハッシュ) などの Memcached K/V ストレージの欠点を大幅に補います。 、データをディスクに永続化することもでき、マスターとスレーブの同期をサポートします。 一般に、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; #指定缓存时间 }
大家也可以了解下: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);
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); //查询某个属性
方案二 优于 方案一。
三、比如社交项目类似于新浪微博,个人中心的关注列表和粉丝列表,双向关注列表,还有热门微博,还有消息订阅 等等。
以上都用 Redis 提供的相关数据结构即可。
四、Memcached 只存储在内存中,而 Redis 既可以存储在内存中,也可以持久化到磁盘上。
如果需求中的数据需要持久化,请选择 Redis 。
个人在工作中没有用到 Memcached ,通过查询资料得到 Memcached 内存分配时优于 Redis。
Memcached 默认使用 Slab Allocation 机制管理内存,按照预先规定的大小,将分配的内存分割成特定长度的块以存储相应长度的key-value数据记录,以完全解决内存碎片问题。
如何保证,缓存与数据库的数据一致性?
新增数据:先新增到数据库,再新增到缓存。
编辑数据:先删除缓存数据,再修改数据库中数据,再新增到缓存。
データの削除: まずキャッシュされたデータを削除し、次にデータベース内のデータを削除します。
データのクエリ: まずキャッシュ データをクエリし、データがない場合はデータベースにクエリを実行して、それをキャッシュに追加します。
トランザクションの一貫性、ポイントインタイムの一貫性、最終的な一貫性など、強い一貫性を保証するのは困難です。
特定の問題を詳しく分析してみましょう。
キャッシュの侵入についてどうすればよいでしょうか?
ユーザーがキャッシュに存在しないデータをリクエストしたため、リクエストはデータベースに直接送信されます。
1. 通常の Key 値を設定し、まずその Key が仕様に準拠しているかどうかを確認します。
2. インターフェイスの電流制限、ダウングレード、サーキット ブレーカーについては、istio をご覧ください: https://istio.io/
3. ブルームフィルター。
4. 空のキャッシュと存在しないキー値の有効期限を設定します。ストレージ レイヤーがデータを作成する場合は、適時にキャッシュを更新します。
雪崩の場合はどうすればよいですか?
1. ミューテックス ロック、インデックスの再構築は 1 つのリクエストのみ許可されます。他のリクエストはキャッシュの再構築が完了するまで待機し、キャッシュからデータを再取得します。
2. オリジナル キャッシュとコピー キャッシュのダブル キャッシュ戦略。オリジナル キャッシュが失敗してコピー キャッシュを要求すると、オリジナル キャッシュの有効期限は短期に設定され、コピー キャッシュは長期に設定されます。 。
推奨学習: 「PHP ビデオ チュートリアル 」
以上がPHP のキャッシュ テクノロジの詳細については、こちらをご覧ください。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。
