缓存
1、配置
Lumen为不同的缓存系统提供了统一的API。缓存配置项位于env文件。在该文件中你可以指定在应用中默认使用哪个缓存驱动。Lumen目前支持流行的缓存后端如
Memcached和
Redis等。对于大型应用,推荐使用内存缓存如Memcached或APC。
1.1 缓存预备知识
数据库
使用
database
缓存驱动时,你需要设置一张表包含缓存缓存项。下面是该表的
Schema
声明:
Schema::create('cache', function($table) {
$table->string('key')->unique();
$table->text('value');
$table->integer('expiration');
});
Memcached
使用Memcached缓存要求安装了
Memcached PECL 包,即PHP Memcached扩展。
Memcached::addServer默认配置使用TCP/IP协议。
Redis
在Lumen中使用Redis缓存之前,你需要通过Composer安装
predis/predis
包(~1.0)和
illuminate/redis
包(~5.1)。
2、缓存使用
2.1 获取缓存实例
Illuminate\Contracts\Cache\Factory
和
Illuminate\Contracts\Cache\Repository
契约提供了访问Laravel的缓存服务的方法。
Factory
契约提供了所有访问应用定义的缓存驱动的方法。
Repository
契约通常是应用中
cache
配置文件中指定的默认缓存驱动的一个实现。
然而,你还可以使用
Cache
门面,这也是我们在整个文档中使用的方式,
Cache
门面提供了简单方便的方式对底层Lumen缓存契约实现进行访问。
例如,让我们在控制器中导入
Cache
门面:
<?php
namespace App\Http\Controllers;
use Cache;
class UserController extends Controller{
/**
* 显示应用所有用户列表
*
* @return Response
*/
public function index()
{
$value = Cache::get('key');
//
}
}
访问多个缓存存储
使用
Cache
门面,你可以使用
store
方法访问不同的缓存存储器,传入
store
方法的键就是cache配置文件中
stores
配置数组里列出的相应的存储器:
$value = Cache::store('file')->get('foo');
Cache::store('redis')->put('bar', 'baz', 10);
2.2 从缓存中获取数据
Cache
门面的
get
方法用于从缓存中获取缓存项,如果缓存项不存在,返回null。如果需要的话你可以传递第二个参数到
get
方法指定缓存项不存在时返回的自定义默认值:
$value = Cache::get('key');
$value = Cache::get('key', 'default');
你甚至可以传递一个闭包作为默认值,如果缓存项不存在的话闭包的结果将会被返回。传递闭包允许你可以从数据库或其它外部服务获取默认值:
$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', $minutes, function() {
return DB::table('users')->get();});
如果缓存项不存在,传递给
remember
方法的闭包被执行并且将结果存放到缓存中。
你还可以联合
remember
和
forever
方法:
$value = Cache::rememberForever('users', function() {
return DB::table('users')->get();
});
获取并删除
如果你需要从缓存中获取缓存项然后删除,你可以使用
pull
方法,和
get
方法一样,如果缓存项不存在的话返回null:
$value = Cache::pull('key');
2.3 存储缓存项到缓存
你可以使用
Cache
门面上的
put
方法在缓存中存储缓存项。当你在缓存中存储缓存项的时候,你需要指定数据被缓存的时间(分钟数):
Cache::put('key', 'value', $minutes);
除了传递缓存项失效时间,你还可以传递一个代表缓存项有效时间的PHP
Datetime
实例:
$expiresAt = Carbon::now()->addMinutes(10);
Cache::put('key', 'value', $expiresAt);
add
方法只会在缓存项不存在的情况下添加缓存项到缓存,如果缓存项被添加到缓存返回
true
,否则,返回
false
:
Cache::add('key', 'value', $minutes);
forever
方法用于持久化存储缓存项到缓存,这些值必须通过
forget
方法手动从缓存中移除:
Cache::forever('key', 'value');
2.4 从缓存中移除数据
你可以使用
Cache
门面上的
forget
方法从缓存中移除缓存项:
Cache::forget('key');
3 Comments
Before using a Redis cache with Lumen, you will need to install the predis/predis package (~1.0) and illuminate/redis package (~5.1) via Composer.
呵呵,国内的文档我也是醉了