PHP の Yii フレームワークのキャッシュ関数の詳細な分析、yii Framework_PHP チュートリアル
PHP の Yii フレームワークのキャッシュ関数の詳細な分析
データ キャッシュとは、一部の PHP 変数をキャッシュに保存し、使用時にキャッシュから取得することを指します。また、クエリ キャッシュやコンテンツ キャッシュなど、より高度なキャッシュ機能の基礎でもあります。
次のコードは、典型的なデータ キャッシュの使用パターンです。 $cache はキャッシュ コンポーネントを指します:
リーリーキャッシュコンポーネント
データ キャッシュには、メモリ、ファイル、データベースなどのさまざまなキャッシュ メモリを表すキャッシュ コンポーネントからのサポートが必要です。
キャッシュ コンポーネントは通常、アプリケーション コンポーネントとして登録され、グローバルに設定およびアクセスできるようになります。次のコードは、2 つの memcached サーバーを使用するようにアプリケーション コンポーネント キャッシュを構成する方法を示しています。 リーリー
その後、Yii::$app->cache を通じて上記のキャッシュコンポーネントにアクセスできます。すべてのキャッシュ コンポーネントは同じ一連の API をサポートしているため、キャッシュを使用するビジネス コードを変更して他の基礎となるキャッシュ コンポーネントに直接置き換える必要はありません。アプリケーション構成で再構成するだけで済みます。たとえば、yiicachingApcCache:
を使用するように上記の設定を変更できます。 リーリーヒント: 複数のキャッシュ コンポーネントを登録できます。キャッシュに依存する多くのクラスは、デフォルトで、cache という名前のコンポーネントを呼び出します (yiiwebUrlManager など)。
サポートされているキャッシュメモリ
Yii は一連のキャッシュ メモリをサポートしており、概要は次のとおりです:
yiicachingApcCache: PHP APC 拡張機能を使用します。このオプションは、集中型アプリケーション環境 (単一サーバー、別個のロード バランサーなしなど) で最も高速なキャッシュ ソリューションと考えることができます。
- yiicachingDbCache: データベース テーブルを使用して、キャッシュされたデータを保存します。このキャッシュを使用するには、yiicachingDbCache::cacheTable に対応するテーブルを作成する必要があります。
- yiicachingDummyCache: キャッシュのプレースホルダーとしてのみ機能し、実際のキャッシュ機能は実装しません。このコンポーネントの目的は、キャッシュの有効性をクエリする必要があるコードを簡素化することです。たとえば、開発中にサーバーに実際のキャッシュ サポートがない場合は、それを使用してキャッシュ コンポーネントを構成します。実際のキャッシュ サービスが有効になったら、対応するキャッシュ コンポーネントの使用に切り替えることができます。どちらの場合も、同じコード Yii::$app->cache->get($key) を使用して、Yii::$app->cache が null である可能性を気にすることなく、キャッシュからデータを取得しようとすることができます。 。
- yiicachingFileCache: 標準ファイルを使用してキャッシュ データを保存します。これは、コンテンツのページ全体など、大きなデータの塊をキャッシュする場合に特に役立ちます。
- yiicachingMemCache: PHP memcache および memcached 拡張機能を使用します。このオプションは、分散アプリケーション環境 (複数のサーバー、負荷分散など) で最も高速なキャッシュ ソリューションと考えられています。
- yiiredisCache: Redis キーと値のペアのストレージに基づいてキャッシュ コンポーネントを実装します (Redis 2.6.12 以降のサポートが必要です)。
- yiicachingWinCache: PHP WinCache (こちらも参照) 拡張機能を使用します。
- yiicachingXCache: PHP XCache 拡張機能を使用します。
- yiicachingZendDataCache: Zend Data Cache を基盤となるキャッシュ メディアとして使用します。
- ヒント: 同じアプリケーション内で異なるキャッシュ メモリを使用できます。一般的な戦略は、小規模で頻繁に使用されるデータ (統計など) にはメモリベースのキャッシュを使用し、より大きくて頻繁に使用されないデータ (Web ページのコンテンツなど) にはファイルまたはデータベースベースのキャッシュを使用することです。
すべてのキャッシュ コンポーネントは同じ基本クラス yiicachingCache を持っているため、すべて次の API をサポートします:
yiicachingCache::get(): 指定されたキーを通じてキャッシュからデータを取得します。データがキャッシュに存在しない場合、または期限切れ/無効になっている場合は、値 false が返されます。
- yiicachingCache::set(): データの一部のキーを指定し、キャッシュに保存します。
- yiicachingCache::add(): キーがキャッシュ内に見つからない場合、指定されたデータはキャッシュに保存されます。
- yiicachingCache::mget(): 指定された複数のキーを通じてキャッシュから複数のデータを取得します。
- yiicachingCache::mset(): 複数のデータ項目をキャッシュに保存します。各データ項目はキーに対応します。
- yiicachingCache::madd(): 複数のデータをキャッシュに保存します。各データはキーに対応します。キーがキャッシュにすでに存在する場合、データはスキップされます。
- yiicachingCache::exists(): キーがキャッシュに存在するかどうかを示す値を返します。
- yiicachingCache::delete(): キーを使用してキャッシュ内の対応する値を削除します。
- yiicachingCache::flush(): キャッシュ内のすべてのデータを削除します。
- MemCache や APC などの一部のキャッシュ メモリは、バッチ モードでのキャッシュされた値の取得をサポートしており、キャッシュされたデータを取得するコストを節約できます。 yiicachingCache::mget() および yiicachingCache::madd() API は、この機能のサポートを提供します。基礎となるキャッシュメモリがこの機能をサポートしていない場合、Yii はその実装もエミュレートします。
- yiicachingCache は PHP ArrayAccess インターフェイスを実装しているため、キャッシュ コンポーネントを配列のように使用することもできます。 いくつかの例を次に示します。
- yii\caching\ChainedDependency:如果依赖链上任何一个依赖产生变化,则依赖改变。
- yii\caching\DbDependency:如果指定 SQL 语句的查询结果发生了变化,则依赖改变。
- yii\caching\ExpressionDependency:如果指定的 PHP 表达式执行结果发生变化,则依赖改变。
- yii\caching\FileDependency:如果文件的最后修改时间发生变化,则依赖改变。
- yii\caching\GroupDependency:将一项缓存数据标记到一个组名,你可以通过调用 yii\caching\GroupDependency::invalidate() 一次性将相同组名的缓存全部置为失效状态。
- PHP の Yii フレームワークに付属するフロントエンド リソース パッケージの使用方法の詳細な説明
- PHP の Yii フレームワークにおけるキャッシュの高度な使用方法の紹介
- PHP の Yii での View の使用フレームワーク
- PHP の Yii フレームワークでビューを作成し、ビューをレンダリングする方法の詳細な説明
- PHP の Yii フレームワークのモデル モデルに関する学習チュートリアル
- PHP の Yii フレームワークのコントローラー コントローラーの詳細な説明
- PHP の Yii フレームワークからのコンポーネントの削除 メソッドバインドされたビヘイビアーの説明
- PHPのYiiフレームワークにおけるビヘイビアの定義とバインド方法の説明
- PHPのYiiフレームワークにおけるプロパティ(Property)の詳細な説明
- PHPのYiiフレームワークにおける拡張機能のインストールと使用方法の詳細な説明
1 2 |
|
缓存键
存储在缓存中的每项数据都通过键作唯一识别。当你在缓存中存储一项数据时,必须为它指定一个键,稍后从缓存中取回数据时,也需要提供相应的键。
你可以使用一个字符串或者任意值作为一个缓存键。当键不是一个字符串时,它将会自动被序列化为一个字符串。
定义一个缓存键常见的一个策略就是在一个数组中包含所有的决定性因素。例如,yii\db\Schema 使用如下键存储一个数据表的结构信息。
1 2 3 4 5 6 |
|
如你所见,该键包含了可唯一指定一个数据库表所需的所有必要信息。
当同一个缓存存储器被用于多个不同的应用时,应该为每个应用指定一个唯一的缓存键前缀以避免缓存键冲突。可以通过配置 yii\caching\Cache::keyPrefix 属性实现。例如,在应用配置中可以编写如下代码:
1 2 3 4 5 6 |
|
为了确保互通性,此处只能使用字母和数字。
缓存过期
默认情况下,缓存中的数据会永久存留,除非它被某些缓存策略强制移除(例如:缓存空间已满,最老的数据会被移除)。要改变此特性,你可以在调用 yii\caching\Cache::set() 存储一项数据时提供一个过期时间参数。该参数代表这项数据在缓存中可保持有效多少秒。当你调用 yii\caching\Cache::get() 取回数据时,如果它已经过了超时时间,该方法将返回 false,表明在缓存中找不到这项数据。例如:
1 2 3 4 5 6 7 8 9 |
|
缓存依赖
除了超时设置,缓存数据还可能受到缓存依赖的影响而失效。例如,yii\caching\FileDependency 代表对一个文件修改时间的依赖。这个依赖条件发生变化也就意味着相应的文件已经被修改。因此,缓存中任何过期的文件内容都应该被置为失效状态,对 yii\caching\Cache::get() 的调用都应该返回 false。
缓存依赖用 yii\caching\Dependency 的派生类所表示。当调用 yii\caching\Cache::set() 在缓存中存储一项数据时,可以同时传递一个关联的缓存依赖对象。例如:
1 2 3 4 5 6 7 8 9 10 11 |
|
下面是可用的缓存依赖的概况:
查询缓存
查询缓存是一个建立在数据缓存之上的特殊缓存特性。它用于缓存数据库查询的结果。
查询缓存需要一个 yii\db\Connection 和一个有效的 cache 应用组件。查询缓存的基本用法如下,假设 $db 是一个 yii\db\Connection 实例:
1 2 3 4 5 6 7 8 |
|
如你所见,beginCache() 和 endCache() 中间的任何查询结果都会被缓存起来。如果缓存中找到了同样查询的结果,则查询会被跳过,直接从缓存中提取结果。
查询缓存可以用于 ActiveRecord 和 DAO。
Info: 有些 DBMS (例如:MySQL)也支持数据库服务器端的查询缓存。你可以选择使用任一查询缓存机制。上文所述的查询缓存的好处在于你可以指定更灵活的缓存依赖因此可能更加高效。
配置
查询缓存有两个通过 yii\db\Connection 设置的配置项:
yii\db\Connection::queryCacheDuration: 查询结果在缓存中的有效期,以秒表示。如果在调用 yii\db\Connection::beginCache() 时传递了一个显式的时值参数,则配置中的有效期时值会被覆盖。
yii\db\Connection::queryCache: 缓存应用组件的 ID。默认为 'cache'。只有在设置了一个有效的缓存应用组件时,查询缓存才会有效。
限制条件
当查询结果中含有资源句柄时,查询缓存无法使用。例如,在有些 DBMS 中使用了 BLOB 列的时候,缓存结果会为该数据列返回一个资源句柄。
有些缓存存储器有大小限制。例如,memcache 限制每条数据最大为 1MB。因此,如果查询结果的大小超出了该限制,则会导致缓存失败。
片段缓存
片段缓存指的是缓存页面内容中的某个片段。例如,一个页面显示了逐年销售额的摘要表格,可以把表格缓存下来,以消除每次请求都要重新生成表格的耗时。片段缓存是基于数据缓存实现的。
在视图中使用以下结构启用片段缓存:
1 2 3 4 5 6 |
|
调用 yii\base\View::beginCache() 和 yii\base\View::endCache() 方法包裹内容生成逻辑。如果缓存中存在该内容,yii\base\View::beginCache() 方法将渲染内容并返回 false,因此将跳过内容生成逻辑。否则,内容生成逻辑被执行,一直执行到 yii\base\View::endCache() 时,生成的内容将被捕获并存储在缓存中。
和[数据缓存]一样,每个片段缓存也需要全局唯一的 $id 标记。
缓存选项
如果要为片段缓存指定额外配置项,请通过向 yii\base\View::beginCache() 方法第二个参数传递配置数组。在框架内部,该数组将被用来配置一个 yii\widget\FragmentCache 小部件用以实现片段缓存功能。
过期时间(duration)
或许片段缓存中最常用的一个配置选项就是 yii\widgets\FragmentCache::duration 了。它指定了内容被缓存的秒数。以下代码缓存内容最多一小时:
1 2 3 4 5 6 |
|
如果该选项未设置,则默认为 0,永不过期。
依赖
和[数据缓存]一样,片段缓存的内容一样可以设置缓存依赖。例如一段被缓存的文章,是否重新缓存取决于它是否被修改过。
通过设置 yii\widgets\FragmentCache::dependency 选项来指定依赖,该选项的值可以是一个 yii\caching\Dependency 类的派生类,也可以是创建缓存对象的配置数组。以下代码指定了一个片段缓存,它依赖于 update_at 字段是否被更改过的。
1 2 3 4 5 6 7 8 9 10 11 |
|
变化
缓存的内容可能需要根据一些参数的更改而变化。例如一个 Web 应用支持多语言,同一段视图代码也许需要生成多个语言的内容。因此可以设置缓存根据应用当前语言而变化。
通过设置 yii\widgets\FragmentCache::variations 选项来指定变化,该选项的值应该是一个标量,每个标量代表不同的变化系数。例如设置缓存根据当前语言而变化可以用以下代码:
1 2 3 4 5 6 |
|
开关
有时你可能只想在特定条件下开启片段缓存。例如,一个显示表单的页面,可能只需要在初次请求时缓存表单(通过 GET 请求)。随后请求所显示(通过 POST 请求)的表单不该使用缓存,因为此时表单中可能包含用户输入内容。鉴于此种情况,可以使用 yii\widgets\FragmentCache::enabled 选项来指定缓存开关,如下所示:
1 2 3 4 5 6 |
|
缓存嵌套
片段缓存可以被嵌套使用。一个片段缓存可以被另一个包裹。例如,评论被缓存在里层,同时整个评论的片段又被缓存在外层的文章中。以下代码展示了片段缓存的嵌套使用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
可以为嵌套的缓存设置不同的配置项。例如,内层缓存和外层缓存使用不同的过期时间。甚至当外层缓存的数据过期失效了,内层缓存仍然可能提供有效的片段缓存数据。但是,反之则不然。如果外层片段缓存没有过期而被视为有效,此时即使内层片段缓存已经失效,它也将继续提供同样的缓存副本。因此,你必须谨慎处理缓存嵌套中的过期时间和依赖,否则外层的片段很有可能返回的是不符合你预期的失效数据。
译注:外层的失效时间应该短于内层,外层的依赖条件应该低于内层,以确保最小的片段,返回的是最新的数据。
动态内容
使用片段缓存时,可能会遇到一大段较为静态的内容中有少许动态内容的情况。例如,一个显示着菜单栏和当前用户名的页面头部。还有一种可能是缓存的内容可能包含每次请求都需要执行的 PHP 代码(例如注册资源包的代码)。这两个问题都可以使用动态内容功能解决。
动态内容的意思是这部分输出的内容不该被缓存,即便是它被包裹在片段缓存中。为了使内容保持动态,每次请求都执行 PHP 代码生成,即使这些代码已经被缓存了。
可以在片段缓存中调用 yii\base\View::renderDynamic() 去插入动态内容,如下所示:
1 2 3 4 5 6 7 8 9 10 |
|
yii\base\View::renderDynamic() 方法接受一段 PHP 代码作为参数。代码的返回值被看作是动态内容。这段代码将在每次请求时都执行,无论其外层的片段缓存是否被存储。
興味があるかもしれない記事:

ホット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)

ホットトピック











ブラウザはビデオをどのフォルダにキャッシュしますか? 私たちは毎日インターネット ブラウザを使用するときに、YouTube でミュージック ビデオを視聴したり、Netflix で映画を視聴したりするなど、さまざまなオンライン ビデオを視聴することがよくあります。これらのビデオは読み込みプロセス中にブラウザによってキャッシュされるため、将来再び再生するときにすぐに読み込むことができます。そこで問題は、これらのキャッシュされたビデオが実際にどのフォルダーに保存されるのかということです。ブラウザーが異なれば、キャッシュされたビデオ フォルダーは異なる場所に保存されます。以下に、いくつかの一般的なブラウザとそのブラウザを紹介します。

DNS (DomainNameSystem) は、ドメイン名を対応する IP アドレスに変換するためにインターネットで使用されるシステムです。 Linux システムでは、DNS キャッシュはドメイン名と IP アドレス間のマッピング関係をローカルに保存するメカニズムです。これにより、ドメイン名解決の速度が向上し、DNS サーバーの負担が軽減されます。 DNS キャッシュを使用すると、システムはその後同じドメイン名にアクセスするときに、毎回 DNS サーバーにクエリ要求を発行する必要がなく、IP アドレスを迅速に取得できるため、ネットワークのパフォーマンスと効率が向上します。この記事では、Linux で DNS キャッシュを表示および更新する方法、関連する詳細およびサンプル コードについて説明します。 DNS キャッシュの重要性 Linux システムでは、DNS キャッシュが重要な役割を果たします。その存在

タイトル: HTML ファイルのキャッシュ メカニズムとコード例 はじめに: Web ページを作成するときに、ブラウザーのキャッシュの問題に遭遇することがよくあります。この記事では、HTML ファイルのキャッシュ メカニズムを詳細に紹介し、読者がこのメカニズムをよりよく理解して適用できるように、いくつかの具体的なコード例を示します。 1. ブラウザのキャッシュ原理 ブラウザでは、Web ページにアクセスするたびに、まずキャッシュに Web ページのコピーがあるかどうかを確認します。存在する場合、Web ページのコンテンツはキャッシュから直接取得されます。これがブラウザー キャッシュの基本原理です。ブラウザキャッシュメカニズムの利点

Guava Cache の初心者ガイド: アプリケーションの高速化 Guava Cache は、アプリケーションのパフォーマンスを大幅に向上させることができる高性能のメモリ内キャッシュ ライブラリです。 LRU (最も最近使用されていないもの)、LFU (最も最近使用されていないもの)、TTL (生存時間) など、さまざまなキャッシュ戦略を提供します。 1. Guava キャッシュをインストールし、Guava キャッシュ ライブラリの依存関係をプロジェクトに追加します。 com.goog

キャッシュ サイズとクリーンアップ戦略の最適化 適切なキャッシュ サイズを APCu に割り当てることが重要です。キャッシュが小さすぎるとデータを効果的にキャッシュできず、キャッシュが大きすぎるとメモリが無駄に消費されます。一般に、キャッシュ サイズを使用可能なメモリの 1/4 ~ 1/2 に設定するのが妥当な範囲です。さらに、効果的なクリーンアップ戦略を採用することで、古いデータや無効なデータがキャッシュに保持されないようにすることができます。 APCu の自動クリーニング機能を使用することも、カスタム クリーニング メカニズムを実装することもできます。サンプルコード: //キャッシュサイズを256MBに設定 apcu_add("cache_size",268435456); //60分ごとにキャッシュをクリア apcu_add("cache_ttl",60*60); 圧縮を有効にする

PHP 開発では、キャッシュ メカニズムにより、頻繁にアクセスされるデータがメモリまたはディスクに一時的に保存され、データベース アクセスの数が削減され、パフォーマンスが向上します。キャッシュの種類には主にメモリ、ファイル、データベース キャッシュが含まれます。キャッシュは、組み込み関数またはサードパーティのライブラリ (cache_get() や Memcache など) を使用して PHP に実装できます。一般的な実用的なアプリケーションには、データベース クエリ結果をキャッシュしてクエリ パフォーマンスを最適化したり、ページ出力をキャッシュしてレンダリングを高速化したりすることが含まれます。キャッシュ メカニズムにより、Web サイトの応答速度が効果的に向上し、ユーザー エクスペリエンスが向上し、サーバーの負荷が軽減されます。

PHP キャッシュ テクノロジの探求: Web サイトのパフォーマンスを向上させる強力なツール、特定のコード サンプルが必要です はじめに: 今日のインターネットの急速な発展に伴い、Web サイトのパフォーマンスはユーザー エクスペリエンスと検索エンジンのランキングにとって非常に重要です。 PHP は一般的に使用されるプログラミング言語として Web サイト開発で広く使用されており、PHP Web サイトのパフォーマンスをいかに向上させるかが開発者にとって緊急の課題となっています。非常に重要なソリューションの 1 つは、PHP キャッシュ テクノロジを使用することです。この記事では、PHP キャッシュの概念と具体的なテクノロジについて説明し、読者の理解を助けるコード例を示します。

ブラウザキャッシュビデオをエクスポートする方法 インターネットの急速な発展に伴い、ビデオは人々の日常生活に欠かせないものになりました。 Web を閲覧しているときに、保存または共有したいビデオ コンテンツに遭遇することがよくありますが、ビデオ ファイルがブラウザのキャッシュにのみ存在するため、ビデオ ファイルのソースが見つからないことがあります。では、ブラウザのキャッシュからビデオをエクスポートするにはどうすればよいでしょうか?この記事では、いくつかの一般的な方法を紹介します。まず、ブラウザキャッシュという概念を明確にする必要があります。ブラウザー キャッシュは、ユーザー エクスペリエンスを向上させるためにブラウザーによって使用されます。
