Yii2博客实战教程——使用缓存减少数据库访问的压力

缓存的使用可以明显改善用户访问的体验,加快用户访问的速度,同时也可以有效降低服务器的负担,提升服务器的吞吐能力。一般来讲,缓存可以分为几个层次。一个是前端的各种html、css、js的缓存,这些静态资源一般我们采用cdn来解决。二是服务器端的缓存,这部分缓存实际是是对数据访问的缓存。对于那些不经常发生变动的或者访问频率较高的数据进行缓存处理,是一种十分经济有效的提升用户体验的方式。接下来我们就讲讲在yii2中如何使用数据缓存。

YII2中原生为我们提供了缓存组建,用户可以自行配制不同的缓存存储方式。

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

默认使用的是文件缓存的方式,如果想更换只需修改配置文件即可

'components' => [
        'cache' => [
            'class' => 'yii\caching\FileCache',
        ],
    ]

使用的时候也非常的简单,我们可以使用全局的变量Yii::$app->cache来获取缓存组建实例。一般来说缓存的使用方式如下:

$key = 你的缓存key
<span class="redactor-invisible-space">$cache =  Yii::$app->cache;
$data = $cache->get($key);<span class="redactor-invisible-space">
if ($data === false) {<p>    // 缓存已过期,或者在缓存中找不到缓存数据
    $data = 通过数据库完成数据查询逻辑
    //将获取到的数据重新写入缓存并设置过期时间
    $cache->set($key, $data,缓存时间);<span class="redactor-invisible-space">
</span>}
return $data;<span class="redactor-invisible-space"></span></p></span></span>

代码结构非常简单,实际上我们只需要把缓存组件当成一个大的内存数组使用就可以了,简单吧。

经过缓存后我们可以通过YII2自带的debug工具条看到数据库访问的频次减少了,在缓存期内,我们不再需要访问数据库获取数据。

本文由 Leo's Blog 创作,采用 署名-非商业性使用 2.5 中国大陆 进行许可。
如需转载、引用请署名作者且注明文章出处。
2016年09月29日 9276 浏览 评论 YII2 缓存
上一篇:Yii2博客实战教程——前台页面的整合(如何自定义widget小部件) | 下一篇:Yii2博客实战教程——多说评论的整合