同步操作将从 董楠/LinkCache 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
LinkCache 是一个PHP编写的灵活高效的缓存工具库,提供多种缓存驱动支持,包括Memcache、Memcached、Redis、SSDB、文件缓存、APC、YAC等。通过LinkCache可以使不同缓存驱动实现操作统一,同时又可发挥不同缓存驱动各自的优势。LinkCache支持缓存 object
和 array
,同时为防止产生惊群现象做了优化。
LinkCache 可以通过 composer
安装,使用以下命令从 composer
下载安装 LinkCache
$ composer require dongnan/linkcache
Git@OSC
下载 http://git.oschina.net/dongnan/LinkCache/tags
GitHub
下载 https://github.com/dongnan/LinkCache/releases
在你的入口文件中引入
<?php
//引入 LinkCache 的自动加载文件
include("path_to_linkcache/autoload.php");
value
设置为 key
的值key
时,将参数中的 value
设置为 key
的值key
对应的值key
key
是否存在key
的生存时间(单位:s)key
的生存时间(单位:s)key
的过期时间key
的生存时间,使其永不过期key
设置锁标记(此锁并不对 key
做修改限制,仅为 key
的锁标记)key
解除锁标记key
的值按整数递增key
的值按浮点数递增key
的值按整数递减key
对应的值key
时,批量设置多个 key
对应的值key
的值配置信息
<?php
//设置缓存, 使用 array_merge 的方式合并到默认配置中
\linkcache\Cache::setConfig($config);
//获取配置信息
$congig = \linkcache\Cache::getConfig();
//获取指定缓存驱动的配置信息
$congig = \linkcache\Cache::getConfig('redis');
//默认配置信息
[
//默认使用的缓存驱动
'default' => 'files',
//当前缓存驱动失效时,使用的备份驱动
'fallback' => 'files',
'memcache' => [
'servers' => [
['host' => '127.0.0.1', 'port' => 11211, 'weight' => 1, 'persistent' => true, 'timeout' => 1, 'retry_interval' => 15, 'status' => true],
],
'compress' => ['threshold' => 2000, 'min_saving' => 0.2],
],
'memcached' => [
'servers' => [
['host' => '127.0.0.1', 'port' => 11211, 'weight' => 1],
],
//参考 Memcached::setOptions
'options' => [],
],
'redis' => [
'host' => '127.0.0.1',
'port' => 6379,
'password' => '',
'database' => '',
'timeout' => ''
],
'ssdb' => [
'host' => '127.0.0.1',
'port' => 8888,
'password' => '',
'timeoutms' => ''
],
]
实例化缓存对象
<?php
//直接new一个
$cache = new \linkcache\Cache();
//通过getInstance获取
$cache = \linkcache\Cache::getInstance();
//根据驱动类型实例化,支持的驱动:redis,memcache,memcached,ssdb,files,apc,yac
$cache = new \linkcache\Cache('files');
//或者
$cache = \linkcache\Cache::getInstance('files');
//传入配置参数实例化
$cache = new \linkcache\Cache('redis', ['host' => '127.0.0.1', 'port' => 6379]);
获取缓存驱动实例
所有缓存驱动都必须实现 linkcache\interfaces\driver\Base
接口的方法,获取到缓存驱动实例后,可直接使用缓存驱动的方法,包括缓存驱动中没有定义但缓存驱动扩展对象中已定义的方法。
将参数中的 value
设置为 key
的值
Boolean 如果设置成功,返回 true
; 如果设置失败,返回 false
<?php
//设置不过期的缓存
$status = $cache->set($key, $value);
//设置有过期时间的缓存
$status = $cache->set($key, $value, $time);
当缓存中不存在 key
时,将参数中的 value
设置为 key
的值
Boolean - 如果设置成功,返回 true
; 如果设置失败,返回 false
<?php
//设置不过期的缓存
$status = $cache->setnx($key, $value);
//设置有过期时间的缓存
$status = $cache->setnx($key, $value, $time);
获取 key
对应的值
Mixed - key
对应的值; 如果获取失败或 key
不存在,返回 false
<?php
//获取key对应的值
$value = $cache->get($key);
删除 key
Boolean - 如果删除成功,返回 true
; 如果删除失败,返回 false
。注意: 当 key
不存在时,也会返回 true
<?php
//删除key
$status = $cache->del($key);
判断 key
是否存在
Boolean - 如果 key
存在,返回 true
;如果 key
不存在,返回 false
<?php
//判断key是否存在
$status = $cache->has($key);
获取 key
的生存时间(单位:s)
Mixed - 生存剩余时间(单位:秒) -1
表示永不过期,-2
表示 key
不存在,失败返回 false
<?php
//获取key的生存时间
$ttl = $cache->ttl($key);
设置一个 key
的生存时间(单位:s)
Boolean - 如果设置成功,返回 true
; 如果设置失败或 key
不存在,返回 false
<?php
//设置一个key的生存时间
$status = $cache->expire($key, $time);
用UNIX时间戳设置一个 key
的过期时间
Boolean - 如果设置成功,返回 true
; 如果设置失败或 key
不存在,返回 false
<?php
//用UNIX时间戳设置一个key的过期时间
$status = $cache->expireAt($key, $time);
删除一个 key
的生存时间,使其永不过期
Boolean - 如果设置成功,返回 true
; 如果设置失败或 key
不存在,返回 false
<?php
//删除一个key的生存时间,使其永不过期
$status = $cache->persist($key);
对 key
设置锁标记(此锁并不对 key
做修改限制,仅为 key
的锁标记)
key锁标记
的生存时间(单位:s)Boolean - 如果设置成功,返回 true
; 如果设置失败,返回 false
<?php
//对key设置锁标记
$status = $cache->lock($key, $time);
对 key
解除锁标记
Boolean - 如果解除锁标记成功,返回 true
; 如果设置失败,返回 false
<?php
//对key解除锁标记
$status = $cache->isLock($key);
设置 key
的值按整数递增
1
,可以为负值Mixed - 递增后的值,失败返回 false
,如果 key
不存在,则按 step
设置新值
<?php
//设置key的值按整数递增
$value = $cache->incr($key, $step);
设置 key
的值按浮点数递增
Mixed - 递增后的值,失败返回 false
,如果 key
不存在,则按 float
设置新值
<?php
//设置key的值按浮点数递增
$value = $cache->incrByFloat($key, $float);
设置 key
的值按整数递减
1
,可以为负值Mixed - 递减后的值,失败返回 false
,如果 key
不存在,则按 -step
设置新值
<?php
//设置key的值按整数递减
$value = $cache->decr($key, $step);
批量设置多个 key
对应的值
key
和 value
组成的键值对数组Boolean - 如果设置成功,返回 true
; 如果设置失败,返回 false
<?php
$sets = [
'key1' => 'value1',
'key2' => 'value2',
'key3' => 'value3',
];
//批量设置多个key对应的值
$status = $cache->mSet($sets);
当缓存中不存在 key
时,批量设置多个 key
对应的值
key
和 value
组成的键值对数组Boolean - 如果设置成功,返回 true
; 如果设置失败,返回 false
<?php
$sets = [
'key1' => 'value1',
'key2' => 'value2',
'key3' => 'value3',
];
//当缓存中不存在key时,批量设置多个key对应的值
$status = $cache->mSetNX($sets);
获取所有给定key的值
key
组成的数组array - 参数 keys
中的所有 key
与对应的 value
组成的数组,如果 key
不存在或是获取失败,对应的 value
值为 false
<?php
$keys = ['key1', 'key2', 'key3'];
//获取所有给定key的值
$status = $cache->mGet($keys);
如果你觉得LinkCache还不错,但又不支持你想用的缓存驱动,不妨尝试在LinkCache新增该缓存驱动的支持。
目前有两种方式可以方便的开发新的缓存驱动支持
继承 linkcache\abstracts\DriverSimple
抽象类
src/linkcache/drivers
目录下创建新的缓存驱动类 Example.php
<?php
/**
* linkcache - 一个灵活高效的PHP缓存工具库
*
* @author Dong Nan <hidongnan@gmail.com>
* @copyright (c) Dong Nan http://idongnan.cn All rights reserved.
* @link http://git.oschina.net/dongnan/LinkCache
* @license BSD (http://opensource.org/licenses/BSD-3-Clause)
*/
namespace linkcache\drivers;
use linkcache\abstracts\DriverSimple;
class Example extends DriverSimple {
/**
* 构造函数
* @param array $config 配置
*/
public function __construct($config = []) {
$this->init($config);
//TODO 完善这个方法
}
/**
* 检查驱动是否可用
* @return boolean 是否可用
*/
public function checkDriver() {
//TODO 实现这个方法
}
/**
* 设置键值
* @param string $key
* @param string $value
* @return boolean
*/
protected function setOne($key, $value) {
//TODO 实现这个方法
}
/**
* 获取键值
* @param string $key
* @return mixed
*/
protected function getOne($key) {
//TODO 实现这个方法
}
/**
* 删除键值
* @param string $key
* @return boolean
*/
protected function delOne($key) {
//TODO 实现这个方法
}
}
linkcache\abstracts\DriverSimple
抽象类中的抽象方法实现接口 linkcache\interfaces\driver\Base
(Base接口是必须的,你也可以实现更多的接口:Incr,Lock,Multi)
src/linkcache/drivers
目录下创建新的缓存驱动类 Example.php
<?php
/**
* linkcache - 一个灵活高效的PHP缓存工具库
*
* @author Dong Nan <hidongnan@gmail.com>
* @copyright (c) Dong Nan http://idongnan.cn All rights reserved.
* @link http://git.oschina.net/dongnan/LinkCache
* @license BSD (http://opensource.org/licenses/BSD-3-Clause)
*/
namespace linkcache\drivers;
use linkcache\interfaces\driver\Base;
class Example implements Base {
use \linkcache\traits\CacheDriver;
/**
* 构造函数
* @param array $config 配置
*/
public function __construct($config = []) {
$this->init($config);
//TODO 完善这个方法
}
/**
* 检查驱动是否可用
* @return boolean 是否可用
*/
public function checkDriver() {
//TODO 实现这个方法
}
/**
* 设置键值
* @param string $key 键名
* @param mixed $value 键值
* @param int $time 过期时间,默认为-1,不设置过期时间;为0则设置为永不过期
* @return boolean 是否成功
*/
public function set($key, $value, $time = -1) {
//TODO 实现这个方法
}
/**
* 当键名不存在时设置键值
* @param string $key 键名
* @param mixed $value 键值
* @param int $time 过期时间,默认为-1,不设置过期时间;为0则设置为永不过期
* @return boolean 是否成功
*/
public function setnx($key, $value, $time = -1) {
//TODO 实现这个方法
}
/**
* 获取键值
* @param string $key 键名
* @return mixed|false 键值,失败返回false
*/
public function get($key) {
//TODO 实现这个方法
}
/**
* 删除键值
* @param string $key 键名
* @return boolean 是否成功
*/
public function del($key) {
//TODO 实现这个方法
}
/**
* 是否存在键值
* @param string $key 键名
* @return boolean 是否存在
*/
public function has($key) {
//TODO 实现这个方法
}
/**
* 获取生存剩余时间
* @param string $key 键名
* @return int|false 生存剩余时间(单位:秒) -1表示永不过期,-2表示键值不存在,失败返回false
*/
public function ttl($key) {
//TODO 实现这个方法
}
/**
* 设置过期时间
* @param string $key 键名
* @param int $time 过期时间(单位:秒)。不大于0,则设为永不过期
* @return boolean 是否成功
*/
public function expire($key, $time) {
//TODO 实现这个方法
}
/**
* 移除指定键值的过期时间
* @param string $key 键名
* @return boolean 是否成功
*/
public function persist($key) {
//TODO 实现这个方法
}
}
linkcache\interfaces\driver\Base
接口中的方法为了保证代码的可靠性,不妨对新增的驱动做个测试吧。 我使用的是PHPUnit做的测试,版本:4.8.15
tests
目录新增测试类 TestDriverExample.php
<?php
/**
* linkcache - 一个灵活高效的PHP缓存工具库
*
* @author Dong Nan <hidongnan@gmail.com>
* @copyright (c) Dong Nan http://idongnan.cn All rights reserved.
* @link http://git.oschina.net/dongnan/LinkCache
* @license BSD (http://opensource.org/licenses/BSD-3-Clause)
*/
namespace linkcacheTests;
/**
* TestDriverExample
*/
class TestDriverExample extends TestDriverFiles
{
protected $cacheDriver = 'example';
}
phpunit --bootstrap autoload_dev.php tests/TestDriverExample
PHPUnit 4.8.15 by Sebastian Bergmann and contributors.
.................
Time: 3.26 seconds, Memory: 8.50Mb
OK (17 tests, 68 assertions)
使用非常灵活宽松的 New BSD License 协议
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。