October CMS 为各种缓存系统提供了一个统一的 API,并且缓存配置位于 config/cache.php。 在此文件中,您可以指定在整个应用程序中默认使用哪个缓存驱动程序。 Memcached 和 Redis 等流行的缓存系统提供开箱即用的支持。
缓存配置文件还包含许多其他选项,这些选项在文件中都有说明,因此请务必仔细阅读这些选项。默认情况下,October CMS 配置为使用 file 缓存驱动程序,该驱动程序将序列化的缓存对象存储在文件系统中。对于大型应用程序,建议您使用内存缓存,例如 Memcached 或 APC。您甚至可以为同一个驱动程序配置多个缓存配置。
database 缓存驱动程序使用数据库而非文件系统。由于数据库结构已可用,因此无需其他配置即可使用此类型。
使用 Memcached 缓存需要安装 Memcached PECL 包。默认配置使用基于 TCP/IP 的 Memcached::addServer。
'memcached' => [
'servers' => [
[
'host' => env('MEMCACHED_HOST', '127.0.0.1'),
'port' => env('MEMCACHED_PORT', 11211),
'weight' => 100,
],
],
],您还可以将 host 选项设置为 UNIX 套接字路径。如果您这样做,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 服务器需要身份验证,你可以通过在你的 Redis 服务器配置数组中添加一个 password 配置项来提供密码。
在使用 DynamoDB 缓存驱动器之前,你应该创建一个 DynamoDB 缓存表来存储所有缓存数据,通常它被命名为 cache。你可以根据你应用程序的 cache 配置文件中 stores.dynamodb.table 配置项的值来命名该表。
'dynamodb' => [
'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),
],此表还应具有一个字符串分区键,其名称应与您应用程序缓存配置文件中 stores.dynamodb.attributes.key 配置项的值相对应。默认情况下,此分区键应命名为 key。
虽然大部分缓存由 October 内部处理, Cache 门面提供了一些简单方法,用于缓存您自己的数据。
Cache facade 上的 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 门面上的 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');您可以使用 forget 方法从 Cache 门面中移除缓存项:
Cache::forget('key');您可以使用 flush 方法清除整个缓存:
Cache::flush();清空缓存不遵循缓存前缀,并且会从缓存中删除所有条目。在清除与其他应用程序共享的缓存时,请仔细考虑这一点。