October CMS 提供了一个统一的 API 用于各种缓存系统并且缓存配置位于 config/cache.php。在此文件中您可以指定希望在整个应用程序中默认使用的缓存驱动程序。流行的缓存系统例如 Memcached 和 Redis 开箱即用。
缓存配置文件也包含各种其他选项, 这些选项在文件中有所记录, 因此请务必仔细阅读这些选项. 默认情况下, October CMS 配置为使用 file 缓存驱动程序, 它将序列化, 缓存的对象存储在文件系统中. 对于大型应用程序, 建议使用内存缓存, 例如 Memcached 或 APC. 您甚至可以为同一个驱动程序配置多个缓存配置.
The database 缓存驱动使用数据库而非文件系统。无需其他配置即可使用此类型,因为数据库结构已可用。
使用 Memcached 缓存需要安装 Memcached PECL 扩展包. 默认配置使用基于 Memcached::addServer 的 TCP/IP.
'memcached' => [
'servers' => [
[
'host' => env('MEMCACHED_HOST', '127.0.0.1'),
'port' => env('MEMCACHED_PORT', 11211),
'weight' => 100,
],
],
],您还可以设置 host 选项为一个 UNIX socket 路径。如果您这样做,port 选项应该设置为 0。
'memcached' => [
[
'host' => '/var/run/memcached/memcached.sock',
'port' => 0,
'weight' => 100
],
],在使用 Laravel 的 Redis 缓存之前,你需要通过 PECL 安装 PhpRedis PHP 扩展或者通过 Composer 安装
predis/predis包(~1.0)。
您的应用程序的 Redis 配置位于 config/database.php 配置文件中。在此文件中,您将看到一个 redis 数组,其中包含您的应用程序使用的 Redis 服务器:
'redis' => [
'cluster' => false,
'default' => [
'host' => '127.0.0.1',
'port' => 6379,
'database' => 0,
],
],您可以在 Redis 连接定义中定义一个 options 数组值,从而允许您指定一组 Predis 客户端选项。
如果您的 Redis 服务器需要身份验证,您可以提供密码通过添加一个 password 配置项到您的 Redis 服务器配置数组。
在使用 DynamoDB 缓存驱动程序之前,您应该创建一个 DynamoDB 缓存表来存储所有缓存数据,通常它被命名为 cache。您可以根据应用程序 cache 配置文件中 stores.dynamodb.table 配置值来命名该表。
'dynamodb' => [
'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),
],此表还应具有一个字符串分区键,其名称应与您的应用程序缓存配置文件中 stores.dynamodb.attributes.key 配置项的值相对应。默认情况下,该分区键应命名为 key。
尽管大多数缓存由 October 在内部处理,但 Cache 外观提供了一些简单的方法,用于缓存您自己的数据。
Cache 门面上的 get 方法用于从缓存中检索项目。如果该项目在缓存中不存在,则会返回 null。如果你愿意,可以向 get 方法传递第二个参数,指定当项目不存在时你希望返回的自定义默认值:
$value = Cache::get('key');
$value = Cache::get('key', 'default');你甚至可以传递一个 Closure 作为默认值。如果指定项不在缓存中,Closure 的结果将被返回。传递一个 Closure 可以让你延迟从数据库或其他外部服务中检索默认值:
$value = Cache::get('key', function() {
return Db::table(...)->get();
});可使用 has 方法来判断缓存中是否存在某个项目:
if (Cache::has('key')) {
//
}increment 和 decrement 方法可用于调整缓存中整型项的值。这两种方法均可选择性地接受第二个参数,用于指明增加或减少该项值的量:
Cache::increment('key');
Cache::increment('key', $amount);
Cache::decrement('key');
Cache::decrement('key', $amount);有时您可能希望从缓存中检索某个项目,但如果请求的项目不存在,则存储一个默认值。例如,您可能希望从缓存中检索所有用户,或者,如果他们不存在,则从数据库中检索他们并将其添加到缓存中。您可以使用 Cache::remember 方法来执行此操作:
$value = Cache::remember('users', $seconds, function() {
return Db::table('users')->get();
});如果缓存中不存在该项,传递给 remember 方法的 Closure 将被执行,并且其结果将被放入缓存。
您也可以结合使用remember和forever方法:
$value = Cache::rememberForever('users', function() {
return Db::table('users')->get();
});如果您需要从缓存中检索一个项目然后删除它, 您可以使用 pull 方法。 与 get 方法类似, null 将在项目不存在于缓存中时返回:
$value = Cache::pull('key');您可以使用 Cache facade 上的 put 方法将项目存储到缓存中。当您将项目放入缓存时,您需要指定该值应缓存的秒数:
Cache::put('key', 'value', $seconds);不再传递缓存项过期前的秒数,你也可以传递一个表示该缓存项过期时间的 PHP DateTime 实例:
$expiresAt = Carbon::now()->addMinutes(10);
Cache::put('key', 'value', $expiresAt);注意: 我们建议使用
DateTime实例来定义所有过期时长,以确保与 October CMS 未来版本的兼容性。
该 add 方法只有在缓存存储中不存在该项时,才会将其添加到缓存中。如果该项确实已添加到缓存中,则该方法将返回 true。否则,该方法将返回 false:
Cache::add('key', 'value', $seconds);forever 方法可用于在缓存中永久存储一个项。这些值必须使用 forget 方法从缓存中手动移除:
Cache::forever('key', 'value');您可以使用 Cache 门面上的 forget 方法从缓存中移除项目:
Cache::forget('key');您可以使用 flush 方法清除整个缓存:
Cache::flush();清除缓存不遵循缓存前缀并将从缓存中移除所有条目。在清除与其他应用程序共享的缓存时,务必仔细考虑这一点。