缓存

配置

LuckyMall为各种不同的缓存提供统一的API. 缓存默认配置在config/cache.php, 生产环境下如果需要对配置文件修改需要拷贝文件到config/production/cache.php. 您可以在此为应用程序指定使用哪一种缓存系统, LuckyMall支持各种常见的后端缓存系统, 如 Memcached. 系统默认使用secache(单文件缓存系统), LuckyMall默认使用secache(单文件缓存系统), 该系统会保存缓存对象在单文件中. 在大型应用程序上, 建议使用保存在内存内的缓存系统, 如 Memcached .

默认资源配置

store配置时不指定resource时, 会使用default配置指定的resource

[
    //...
    'default' => 'default',
    //...
];

开发环境环境配置

在开发环境下, 可以设置enablefalse.

[
    //...
    'enabled' => false,
    //...
];

存储场景

缓存在具体的使用场景上通常有使用独立的缓存方案的趋势. 比如, session 验证码等. 当站点访问量不大的情况下, session及其他各类的缓存公用同样的缓存存储方式是合适的. 但当用户数量激增的情况下, 为了保证用户体系的性能, 就会考虑为session设定单独的缓存服务器集群.

针对这样的状况. LuckyMall将store存储场景抽象出来, 可以为不同的场景设定不同的缓存资源, 通过resouce选项来指定缓存资源, 下文会有讲解.

例如, 在session的使用场景下使用缓存时, 指定存储场景storesession.

cache::store('session')->put($key, $value, 5);

注意 有两种情况, 会使用默认存储场景所指定的resource 当调用缓存时, 不指定缓存场景时 当store配置选项里不指定resource

[
    'default' => 'default',
    'stores' => [

        'default' => [
            'title' => '默认',
            'memo' => '',
            'resource' => 'secache',
        ],

        'session' => [
            'title' => '会话',
            'memo' => '访问Web应用程序的每个用户都生成一个单独的Session. 每个 Session 对象的持续时间是用户访问的时间加上不活动的时间. 存储用户SESSIOn',
            'resource' => 'memcached',
        ],

        'vcode' => [
            'title' => '验证码',
            'memo' => '验证码, 默认请勿',
            'resource' => 'secache',
        ],

        'compiler' => [
            'title' => '系统模板缓存',
            'memo' => '系统模板缓存',
        ],
    ],
];

缓存资源

resource(缓存资源)定义了特定驱动的缓存资源配置.

例如, 当准备为session设置独立的memcached缓存资源时, 可用下边的方法.

[
    'resources' => [
        'null'=> [
            'driver' => 'null'
        ],

        'secache' => [
            'driver' => 'secache',
        ],

        'session-memcached' => [
            'driver' => 'memcached',
            'servers' => [
                ['host' => '192.168.0.1', 'port' => 11211, 'weight' => 100],
                ['host' => '192.168.0.2', 'port' => 11211, 'weight' => 100],
            ],
        ],
    ],
    'stores => [
        //...
        'session' => [
            'title' => '...',
            'memo' => '...',
            'resource' => 'session-memcached',
        ],
        //...
    ],
];

缓存开启及关闭

配置

缓存关闭的目主要是在开发环境. 缓存的开启及关闭. 可以通过enabled选项进行控制. 但在有些场景下, 当关闭整体缓存时也不能关闭缓存, 那么可用disabled_except选项来配置, 例如, session.

return [
    //...
    'enabled' => true,

    disabled_except' => ['session', 'vcode'],
    //...

];

运行时开启缓存

cache::enable();

运行时关闭缓存

cache::disable();

缓存用法

保存对象到缓存中

cache::put('key', 'value', $minutes);

若是对象不存在, 则将其存入缓存中

cache::add('key', 'value', $minutes);

当对象确加入成功时, 会返回true否则会返回false.

确认对象是否存在

if (cache::has('key'))
{
    return cache::get('key);
}

cache::has是个很友好的用法, 但实际上它是通过单独调用cache::get来实现的. 因此意味着当上例中其实会调cache::get两次, 会增加缓存服务器的QPS. 不建议使用

从缓存中取得对象

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

$value = cache::get('key', function() { return 'default'; });

永久保存对象到缓存中

cache::forever('key', 'value');

有时候您会希望从缓存中取得对象, 而当此对象不存在时会保存一个默认值, 您可以使用 cache::remember 方法:

$value = cache::remember('users', $minutes, function() { return getCommonDatta(); });

$value = cache::remember('users', $minutes, function()
{
    return getUserData();
});

您也可以结合 rememberforever 方法:

$value = cache::rememberForever('users', function()
{
    return getUserData();
});

请注意所有保存在缓存中的对象皆会被序列化, 所以您可以任意保存各种类型的数据.

从缓存拉出对象

如果您需要从缓存中取得对象后将它删除,您可以使用 pull 方法:

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

指定存储场景

当使用多种缓存存储时, 你可以通过 store 方法来访问它们:

当制定存储场景store时, 将会应用对应store设置的缓存资源resource.

$value = cache::store('session')->get('key');

注意 有两种情况, 会使用默认存储场景所指定的resource 当调用缓存时, 不指定缓存场景时 当store配置选项里不指定resource

递增与递减

递增值

Cache::increment('key');

Cache::increment('key', $amount);

递减值

Cache::decrement('key');

Cache::decrement('key', $amount);

Memcached缓存

使用 Memcached 缓存需要安装 Memcached PECL package.

默认 配置 使用 TCP/IP 协议, 基于Memcached::addServer:

'memcached' => array(
    array('host' => '127.0.0.1', 'port' => 11211, 'weight' => 100),
),

你也可以设置 host 选项配置一个 UNIX socket 路径,如果你这样做,port 选项应该设置为 0:

'memcached' => array(
    array('host' => '/var/run/memcached/memcached.sock', 'port' => 0, 'weight' => 100),
),

缓存命令行工具

清理缓存

Usage:
base:cache clean [options] [--store <store>]
--all / -a                    清空所有缓存资源
--resource / -r [1]           清空指定缓存资源
--store / -s [1]              清空Store对应缓存资源

例子, 清空resourcememcached的缓存资源

sudo -u www ./cmd base:cache clean --resource memcached

沪ICP备05002918号

© 2003-2017 ShopEx,Inc.All rights reserved.