首页 > 开发 > Php > 正文

深入解析PHP的Yii框架中的缓存功能

2020-02-21 20:50:36
字体:
来源:转载
供稿:网友

数据缓存是指将一些 PHP 变量存储到缓存中,使用时再从缓存中取回。它也是更高级缓存特性的基础,例如查询缓存和内容缓存。

如下代码是一个典型的数据缓存使用模式。其中 $cache 指向缓存组件:

// 尝试从缓存中取回 $data $data = $cache->get($key);if ($data === false) {  // $data 在缓存中没有找到,则重新计算它的值  // 将 $data 存放到缓存供下次使用  $cache->set($key, $data);}// 这儿 $data 可以使用了。

缓存组件

数据缓存需要缓存组件提供支持,它代表各种缓存存储器,例如内存,文件,数据库。

缓存组件通常注册为应用程序组件,这样它们就可以在全局进行配置与访问。如下代码演示了如何配置应用程序组件 cache 使用两个 memcached 服务器:

'components' => [  'cache' => [    'class' => 'yii/caching/MemCache',    'servers' => [      [        'host' => 'server1',        'port' => 11211,        'weight' => 100,      ],      [        'host' => 'server2',        'port' => 11211,        'weight' => 50,      ],    ],  ],],

然后就可以通过 Yii::$app->cache 访问上面的缓存组件了。

由于所有缓存组件都支持同样的一系列 API ,并不需要修改使用缓存的业务代码就能直接替换为其他底层缓存组件,只需在应用配置中重新配置一下就可以。例如,你可以将上述配置修改为使用 yii/caching/ApcCache:

'components' => [  'cache' => [    'class' => 'yii/caching/ApcCache',  ],],

Tip: 你可以注册多个缓存组件,很多依赖缓存的类默认调用名为 cache 的组件(例如 yii/web/UrlManager)。
支持的缓存存储器

Yii 支持一系列缓存存储器,概况如下:

yii/caching/ApcCache:使用 PHP APC 扩展。这个选项可以认为是集中式应用程序环境中(例如:单一服务器,没有独立的负载均衡器等)最快的缓存方案。 yii/caching/DbCache:使用一个数据库的表存储缓存数据。要使用这个缓存,你必须创建一个与 yii/caching/DbCache::cacheTable 对应的表。 yii/caching/DummyCache: 仅作为一个缓存占位符,不实现任何真正的缓存功能。这个组件的目的是为了简化那些需要查询缓存有效性的代码。例如,在开发中如果服务器没有实际的缓存支持,用它配置一个缓存组件。一个真正的缓存服务启用后,可以再切换为使用相应的缓存组件。两种条件下你都可以使用同样的代码 Yii::$app->cache->get($key) 尝试从缓存中取回数据而不用担心 Yii::$app->cache 可能是 null。 yii/caching/FileCache:使用标准文件存储缓存数据。这个特别适用于缓存大块数据,例如一个整页的内容。 yii/caching/MemCache:使用 PHP memcache 和 memcached 扩展。这个选项被看作分布式应用环境中(例如:多台服务器,有负载均衡等)最快的缓存方案。 yii/redis/Cache:实现了一个基于 Redis 键值对存储器的缓存组件(需要 redis 2.6.12 及以上版本的支持 )。 yii/caching/WinCache:使用 PHP WinCache(另可参考)扩展. yii/caching/XCache:使用 PHP XCache扩展。 yii/caching/ZendDataCache:使用 Zend Data Cache 作为底层缓存媒介。 Tip: 你可以在同一个应用程序中使用不同的缓存存储器。一个常见的策略是使用基于内存的缓存存储器存储小而常用的数据(例如:统计数据),使用基于文件或数据库的缓存存储器存储大而不太常用的数据(例如:网页内容)。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表