数据缓存
本章节主要介绍,ShopWind系统数据缓存的方式,包括文件缓存、Redis缓存、MemCache缓存,使用缓存的一大作用就是加快页面访问速度,减轻服务器资源消耗。
一、文件缓存
数据缓存是指将一些 PHP 变量、数据存储到缓存中,使用时再从缓存中取回。文件缓存是电商系统里常见的缓存方式,在ShopWind系统中,您无需做任何配置就能直接使用文件缓存功能。调用文件缓存代码后,系统会自动创建缓存文件存储缓存内容, 并可以设置数据过期时效(默认为0,表示永久缓存),实现一个数据缓存的代码很简单,如下所示:
$cache = Yii::$app->cache;
$cache->set($key, $data, 3600);
该调用方式是全局的,意味着您可以在任何PHP文件中使用该组件,其中$key代表的是缓存的键值,请注意:key值不能有重名,如果有重名,缓存数据将会被覆盖,$data代表的是要缓存的数据,如字符串,数组等,第三个参数是数据缓存的过期时间,这里表示3600秒。
如果您想了解缓存组件的其他配置,也可以查看配置文件:@shopwind\common\config\main.php,如果欲修改cachePath路径,则需要确保其指向的路径具有写入权限。
'components' => [
    'cache' => [
        'class' => 'yii\caching\FileCache', // 文件缓存组件
        'cachePath' => '@runtime/cache', // 缓存文件保存路径
    ],
]
当我们设置了一个缓存数据之后,想要获取缓存数据,可以通过下面的代码来实现,在实例中,我们首先判断缓存是否存在,如果存在则直接读取,不存在则重新获取数据然后保存到缓存中。
$cache = Yii::$app->cache;
$key = 'cacheid'; //  缓存的key值,可以随便定义,但要确保读取和保存使用的是同一个key值
$data = $cache->get($key); // 读取缓存中的数据
if($data === false)
{
    $data = \common\models\GoodsModel::find()->limit(10);// 要缓存的数据
    $cache->set($key, $data, 3600);
}
关于缓存的其他操作:
// 删除一个缓存 
$cache->delete($key);

// 清除所有缓存
$cache->flush();
二、Redis缓存

相比于文件缓存,Redis缓存具有更高效的性能。在ShopWind系统中,我们可以将Redis作为缓存组件来使用,扩展中的yii\redis\Cache实现了缓存相关接口,用法跟文件缓存一样。 在使用Redis缓存前,您需要做以下操作:

1、配置Redis服务,可以参照《Redis拓展》中的Redis配置 完成Redis组件的连接设置。

2、修改配置文件@shopwind\common\config\main.phpcache节点如下:

'components' => [
    'cache' => [
        // 'class' => 'yii\caching\FileCache',
        'class' => 'yii\redis\Cache',
    ],
]
请注意:如果没有设置过Redis组件的连接配置,您需要采用如下配置(即:增加redis节点):
'components' => [
    'cache' => [
        // 'class' => 'yii\caching\FileCache',
        'class' => 'yii\redis\Cache',
        'redis' => [
            'hostname' => 'localhost',
            'port' => 6379, // 如果是SSL连接,请配置为6380
            'database' => 0,
        ]
    ]
]
将Redis组件作为缓存拓展使用后,不管今后我们使用的是文件缓存yii\caching\FileCache,还是Redis缓存yii\redis\Cache,我们在业务中编写的代码都是一样的, 我们将可以很方便的根据业务需要选择使用哪种缓存,只需要修改配置文件就行,而不需要调整业务代码。
// 获取缓存对象
$cache = Yii::$app->cache;

// 读取缓存中的数据
$data = $cache->get($key); 

// 保存数据到缓存
$cache->set($key, $data, 3600);

// 删除一个缓存 
$cache->delete($key);

// 清除所有缓存
$cache->flush();
使用文件缓存(FileCache)时,缓存是存储在 runtime/cache 目录下;使用 redis 缓存后,缓存将存储在 redis 数据库中,性能将大大提高。
三、MemCache缓存
MemCache 是基于 memcachememcached 实现的缓存应用组件。MemCache 支持 memcache 和 memcached。通过设置 $useMemcached 为 true 或者 false, 你可以让 MemCache 在使用 memcached 或者 memcache 之间随意切换。

MemCache 通过设置 $servers 属性来配置 memcache 服务器列表。 默认情况下,MemCache 会认为有一个服务器运行在 localhost 的 11211 端口。

要把 MemCache 当作缓存应用组件使用,参考下述的配置:

1、在开启MemCache缓存之前,请确保在服务端已经安装了MemCache服务,否则会造成页面无法访问,请开放11211端口(默认)及设置好白名单,MemCache服务可以为本地安装(使用宝塔可以一键安装),也可以是云端,例如:阿里云的【云数据库MemCache】产品, 开启服务之后,配置php.ini启用 php_memcache.dll/php_memcached.dll 拓展。

2、修改配置文件,路径为@shopwind\common\config\main.php,如下代码:

'components' => [
    'cache' => [
        'class' => 'yii\caching\MemCache',
        'servers' => [
            [
                'host' => 'localhost',
                'port' => 11211,
                'weight' => 60,
            ]
            // ...
        ]
        'useMemcached' => true // true 使用 memcached, false 使用 memcache
 ]
经过以上配置之后,就可以使用 MemCache了,使用方法跟文件缓存是一样的。
文件缓存、Redis缓存、Memcache缓存都是数据缓存的常用方式,三种缓存方式各有优劣,目前来看Redis比较受欢迎,关于三种缓存的更多官方资料,可以参阅:数据缓存
更多问题,可以访问我们的 开发者社区反馈,我们会有官方技术人员在线解答。