linio/cache

提供多层次的缓存抽象


README

Latest Stable Version License Build Status Scrutinizer Code Quality

Linio Cache 是 Linio 框架的另一个组件。它旨在通过支持多个适配器来抽象缓存。

安装

推荐通过 composer 安装 Linio Cache。

{
    "require": {
        "linio/cache": "dev-master"
    }
}

测试

要运行测试套件,您需要通过 composer 安装依赖项,然后运行 PHPUnit。

$ composer install
$ phpunit

未找到的缓存键

现在(v.1.0.9)可以在适配器堆栈的上一级适配器中缓存未找到的键。可以在适配器级别设置配置选项 cache_not_found_keys

请注意,此选项显然不适用于缓存层次结构的最后一层。

使用方法

<?php

use \Linio\Component\Cache\CacheService;

$container['cache'] = new CacheService([
    'namespace' => 'mx',
    'layers' => [
        0 => [
            'adapter_name' => 'array',
            'adapter_options' => [
                'cache_not_found_keys' => true,
                'encoder' => 'json',
            ],
        ],
        1 => [
            'adapter_name' => 'apc',
            'adapter_options' => [
                'ttl' => 3600,
            ],
        ],
        2 => [
            'adapter_name' => 'redis',
            'adapter_options' => [
                'host' => 'localhost',
                'port' => 6379,
                'ttl' => 0,
                'encoder' => 'serial',
            ],
        ],
    ],
]);

$container->setLogger($container['logger']);

请注意,必须提供一个适配器名称和选项数组。每个适配器都有不同的配置选项。

开始设置数据

<?php

$app['cache.service']->set('foo', 'bar');

方法

get

<?php

    /**
     * @param string $key
     * @return string value
     */
    public function get($key);

    $adapter->get('foo');

getMulti

<?php

     /**
     * @param array $keys
     * @return string[]
     */
    public function getMulti(array $keys);

    $adapter->getMulti(['foo', 'nop']);

set

<?php

     /**
     * @param string $key
     * @param string $value
     * @param ?int $ttl Time To Live; store value in the cache for ttl seconds.
     * This ttl overwrites the configuration ttl of the adapter
     * @return bool
     */
    public function set(string $key, $value, ?int $ttl = null);

    $adapter->set('foo', 'bar');
    $adapter->set('foo', 'bar', 60); // store bar in the cache for 60 seconds

setMulti

<?php

     /**
     * @param array $keys
     * @return bool
     */
    public function setMulti(array $data);

    $adapter->setMulti(['foo' => 'bar', 'fooz' => 'baz']);

delete

<?php

     /**
     * @param string $key
     * @return bool
     */
    public function delete($key);

    $adapter->delete('foo');

deleteMulti

<?php

     /**
     * @param array $keys
     * @return bool
     */
    public function deleteMulti(array $keys);

    $adapter->deleteMulti(['foo', 'fooz']);

contains

<?php

     /**
     * @param string $key
     * @return bool
     */
    public function contains($key);

    $adapter->contains('foo');

flush

<?php

     /**
     * @return bool
     */
    public function flush();

    $adapter->flush();

提供者

array

此缓存不会在请求之间保持持久性。

不建议在生产环境中使用。

apc

适配器选项

  • ttl 可选 默认: 0(无限期)
  • cache_not_found_keys 可选 默认: false

需要 APC 扩展APCu 扩展

wincache

适配器选项

  • ttl 可选 默认: 0(无限期)
  • cache_not_found_keys 可选 默认: false

需要 WinCache 扩展

memcached

适配器选项

  • servers memcache 服务器的数组。格式:[[, , ], [, , ], ...]
  • options memcache 选项的数组。格式:[<option_name1> => , <option_name2> => , ...]
  • connection_persistent 可选 默认: false
  • pool_size 可选 默认: 1(仅适用于持久连接)
  • ttl 可选 默认: 0(无限期)
  • cache_not_found_keys 可选 默认: false

需要 Memcached 扩展

redis

适配器选项

  • host 可选 默认: 127.0.0.1
  • port 可选 默认: 6379
  • database 可选 默认: 0(整数)
  • password 可选 默认: null(无密码)
  • connection_persistent 可选 默认: false
  • ttl 可选 默认: 0(无限期)
  • cache_not_found_keys 可选 默认: false

有关可用参数的更多信息,请参阅 Predis 文档

phpredis

适配器选项

  • host 可选 默认: 127.0.0.1
  • port 可选 默认: 6379
  • database 可选 默认: 0(整数)
  • password 可选 默认: null(无密码)
  • connection_persistent 可选 默认: false
  • pool_size 可选 默认: 1(仅适用于持久连接)
  • timeout 可选 默认: 0(无限期)
  • read_timeout 可选 默认: 0(无限期)
  • retry_interval 可选 默认: 0(毫秒值)
  • ttl 可选 默认: 0(无限期)
  • cache_not_found_keys 可选 默认: false
  • serializer 可选 默认: none
    • none 不序列化数据
    • php 使用内置的序列化/反序列化
    • igbinary 使用 igBinary 序列化/反序列化(需要 igbinary 扩展)

有关可用参数的更多信息,请参阅 phpredis 文档

需要 redis 扩展

mysql

使用 PDO。

适配器选项

  • 主机
  • 端口
  • 数据库名
  • 用户名
  • 密码
  • 表名
  • ensure_table_created 可选 默认: false
  • cache_not_found_keys 可选 默认: false

使用 ensure_table_created 确保缓存表在数据库中存在。此选项对性能有显著影响。

不建议在生产环境中使用。

aerospike

适配器选项

  • 主机
  • aerospike_namespace 可选 默认:test
  • persistent 可选 默认:true
  • options 可选 默认:[]
  • ttl 可选 默认: 0(无限期)
  • cache_not_found_keys 可选 默认: false

对于Aerospike适配器,aerospike_namespace 属性将用作Aerospike中的 namespace,而 CacheService 中的 namespace 配置将用作Aerospike中的 set

需要 Aerospike扩展