缓存

未匹配的标注
本文档最新版为 6.x,旧版本可能放弃维护,推荐阅读最新版!

缓存

配置信息

Lumen 给各种不同的缓存系统提供了统一的 API,缓存的配置文件都放在 .env 中,在这个文件中,你可以指定默认想用哪个缓存驱动,Lumen 支持当前流行的缓存后端,如 MemcachedRedis

场景布置

数据库

当使用 database 这个缓存驱动时,你需要配置一个数据库表来放置缓存项目,下面是表结构:

Schema::create('cache', function($table) {
    $table->string('key')->unique();
    $table->text('value');
    $table->integer('expiration');
});

Memcached

使用 Memcached 做缓存需要先安装 Memcached PECL 扩展包

默认的 配置文件 采用以 Memcached::addServer 为基础的 TCP/IP:

Redis

在你选择使用 Redis 作为 Lumen 的缓存之前,你需要通过 Composer 预先安装 predis/predis 扩展包 (~1.0),还有 illuminate/redis 扩展包 (~5.1)。

缓存的使用

获取一个缓存的实例

Illuminate\Contracts\Cache\FactoryIlluminate\Contracts\Cache\Repository contracts 提供了访问 Lumen 缓存服务的机制, 而 Factory contract 则为你的应用程序提供了访问所有缓存驱动的机制,Repository contract 是典型的缓存驱动实现,它会依照你的缓存配置文件的变化而变化。

你也需要使用 Cache facade,我们将会在此文档中介绍,Cache facade 提供了方便又简洁的方法访问缓存实例。

例如,我们试着在一个控制器中引用 Cache facade:

<?php

namespace App\Http\Controllers;

use Cache;

class UserController extends Controller
{
    /**
     * 显示应用程序中所有用户列表。
     *
     * @return Response
     */
    public function index()
    {
        $value = Cache::get('key');

        //
    }
}

访问多个缓存仓库

使用 Cache facade 可通过 store 方法来访问缓存仓库,传入 store 方法的键对应一个缓存配置文件中的 stores 配置值:

$value = Cache::store('file')->get('foo');

Cache::store('redis')->put('bar', 'baz', 10);

从缓存中获取项目

Cache facade 中,get 方法可以用来取出缓存中的项目,缓存不存在的话返回 nullget 方法接受第二个参数,作为找不到项目时返回的预设值:

$value = Cache::get('key');

$value = Cache::get('key', 'default');

你甚至可以传入一个闭包作为默认值,当指定的项目不存在缓存中时,闭包将会被返回,传入一个闭包允许你延迟从数据库或外部服务中取出值:

$value = Cache::get('key', function() {
    return DB::table(...)->get();
});

确认项目是否存在

has 方法可以用来检查一个项目是否存在于缓存中:

if (Cache::has('key')) {
    //
}

递增与递减值

incrementdecrement 方法可以用来调整缓存中的整数项目值,这两个方法都可以选择性的传入第二个参数,用来指示要递增或递减多少:

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 方法的闭包将会被运行,而且闭包的运行结果将会被存放在缓存中。

你也可以结合 rememberforever 这两个方法来 ”永久“ 存储缓存:

$value = Cache::rememberForever('users', function() {
    return DB::table('users')->get();
});

取出与删除

如果你需要从缓存中取出一个项目并删除它,你可能会使用 pull 方法,与 get 相似,如果对象不存在缓存中,pull 方法将会返回 null

$value = Cache::pull('key');

存放项目到缓存中

你可以使用 Cache facade 的 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');

删除缓存中的项目

你可以使用 forget 方法从缓存中移除一个项目:

Cache::forget('key');

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
发起讨论 只看当前版本


暂无话题~