如今,如果您要与全球受众打交道,即使是几分钟也无法离线,因为这会让您的竞争对手有机会证明他们领先于您。
如果您正在进行网络开发,缓存是一个重要因素。它确实有助于减轻 Web 服务器同时处理数千个(甚至数百万个)请求所需的繁重工作。现在有很多可用选项可以提高您的 Web 应用程序的性能,但缓存的基本概念保持不变。
您只需构建一个包含几个页面的静态 HTML 网站即可完成的日子已经一去不复返了。在这种情况下,您不必担心网站上产生的并发请求和大量流量,因为与需要大量服务器资源来构建的动态网页相比,发送这些静态 HTML 页面要快得多他们自己。
典型的动态页面有很多功能,从查询数据库到从第三方服务提供商获取数据。显示包含大量不同格式信息的页面需要大量工作。具体来说,随着流量的增加,您无法查询数据库来为每个请求获取相同的复杂信息。它很快就会使您的服务器资源紧张,在您可以执行某些操作之前它们就会消失!
因此,您需要介于两者之间的东西来加快速度,这就是缓存的用武之地。缓存的想法非常简单——您将计算/格式化的结果存储在某处,并在需要时获取它们,这样您就不必再次执行此操作。这个“某个地方”可以是任何地方:文件系统、内存或数据库本身。
此外,还有很多可用于缓存的选项——memcached、Redis、Varnish 等等。您可以根据需要使用这些组件,有时多个组件的组合也有助于成倍提高性能。
由于需要一个完整的系列来解释缓存的来龙去脉,而且这超出了本文的范围,因此我们将回到 OpenCart 上下文并在下一节中继续。
我们将使用最新版本的 OpenCart,因此请确保您已安装该版本以遵循代码。
缓存库是在核心本身中提供的,所以让我们立即探索它。继续并在您喜欢的文本编辑器中打开 system/library/cache.php
文件。
<?php class Cache { private $cache; public function __construct($driver, $expire = 3600) { $class = 'Cache\\' . $driver; if (class_exists($class)) { $this->cache = new $class($expire); } else { exit('Error: Could not load cache driver ' . $driver . ' cache!'); } } public function get($key) { return $this->cache->get($key); } public function set($key, $value) { return $this->cache->set($key, $value); } public function delete($key) { return $this->cache->delete($key); } }
从构造函数开始,它初始化构造函数参数中传递的缓存驱动程序。如果该类可用于请求的缓存适配器,它将被初始化为 $this->cache
属性,否则它将退出并显示错误消息。我们将在下一节中看到不同的缓存适配器。
此外,还有三个包装函数用于执行与缓存相关的所有操作。
get
方法用于从缓存中检索值。
$this->cache->get($key);
set
方法用于将值存储在缓存中。
$this->cache->set($key, $value);
delete
方法用于从缓存中删除键/值映射。
$this->cache->delete($key);
因此,在模块中使用缓存功能也非常简单。
前端有很多地方从缓存存储中获取数据。让我们列出其中一些:
对于文件缓存,您会发现所有缓存文件都存储在 system/cache
目录下。尽管 OpenCart 会在适当的事件时清除缓存,但您也可以手动清除这些文件以获取最新数据。
就缓存包装而言,这就是它。在下一节中,我们将看到核心中可用的不同缓存适配器以及它们完成的实际繁重工作。
OpenCart 的核心提供了三种缓存适配器:file、memcache 和 apc。 OpenCart 中使用的默认缓存适配器是 file。
这是来自 index.php
的代码片段,它使用默认缓存适配器初始化 $cache
对象。
// Cache $cache = new Cache('file'); $registry->set('cache', $cache);
不幸的是,没有可配置的方法允许您切换缓存适配器,因为它是硬编码的。话虽如此,您可以使用 OCMOD 更改默认缓存适配器,而无需更改核心文件。
由于每个缓存适配器的实现几乎相同,因此我们仅查看其中一个缓存适配器以了解发生了什么情况。我们以内存缓存为例。继续打开 system/library/cache/mem.php
。您还可以探索同一目录中的其他两个适配器 file.php
和 apc.php
。
<?php namespace Cache; class Mem { private $expire; private $cache; public function __construct($expire) { $this->expire = $expire; $this->cache = new \Memcache(); $this->cache->pconnect(CACHE_HOSTNAME, CACHE_PORT); } public function get($key) { return $this->cache->get(CACHE_PREFIX . $key); } public function set($key,$value) { return $this->cache->set(CACHE_PREFIX . $key, $value, MEMCACHE_COMPRESSED, $this->expire); } public function delete($key) { $this->cache->delete(CACHE_PREFIX . $key); } }
每个缓存适配器都在“Cache”命名空间下定义,以避免冲突。
前のセクションで説明した方法を思い出してください。実際にはここで終わりです。したがって、Cache
クラスの get
メソッドを呼び出すと、実際には実際のアダプター クラス (この例では) で定義された get
メソッドが呼び出されます。これは、 Mem
クラス。
キャッシュ エントリを操作する実際のロジックは、アダプター クラスのメソッド内で発生します。ご覧のとおり、Mem
クラスのコンストラクターで Memcache オブジェクトを初期化し、pconnect
メソッドを使用して接続を確立します。最後に、Memcache オブジェクトの get、set、および delete メソッドを使用して、キャッシュ エントリを操作します。
一方、ファイル キャッシュ ハンドラーの実装を見ると、ファイル システム関数を使用してキャッシュ エントリを保存および取得するのにある程度の労力がかかることがわかります。それ以外は、実装に違いはありません。
これは、OpenCart に関係するキャッシュ アダプターです。もちろん、必要に応じて独自のカスタム キャッシュ ハンドラーを作成することもできます。必要なメソッドを実装するだけで完了です。
今日はここまでです。このチュートリアルが気に入っていただければ幸いです。また、必要に応じてカスタム モジュールでキャッシュを使用することをお勧めします。
###結論は###以下のフィードを自由に使用して、質問や提案の形であなたの考えを表現してください。
以上がOpenCart でキャッシュの技術をマスターするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。