Download the PHP package dongnan/linkcache without Composer
On this page you can find all versions of the php package dongnan/linkcache. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download dongnan/linkcache
More information about dongnan/linkcache
Files in dongnan/linkcache
Package linkcache
Short Description A flexible and high-performance library of cache for PHP
License BSD-3-Clause
Homepage http://git.oschina.net/dongnan/LinkCache
Informations about the package linkcache
LinkCache - 一个灵活高效的PHP缓存工具库
LinkCache 是一个PHP编写的灵活高效的缓存工具库,提供多种缓存驱动支持,包括Memcache、Memcached、Redis、SSDB、文件缓存、APC、YAC等。通过LinkCache可以使不同缓存驱动实现操作统一,同时又可发挥不同缓存驱动各自的优势。LinkCache支持缓存 object
和 array
,同时为防止产生惊群现象做了优化。
环境要求
- PHP >= 5.4
- 使用 Memcache 缓存需要安装Memcache扩展
- 使用 Memcached 缓存需要安装Memcached扩展
- 使用 Redis 缓存需要安装Redis扩展
- 使用 APC 缓存需要安装APC扩展
- 使用 YAC 缓存需要安装YAC扩展
安装
composer 安装
LinkCache 可以通过 composer
安装,使用以下命令从 composer
下载安装 LinkCache
手动下载安装
下载地址
- 在
Git@OSC
下载 http://git.oschina.net/dongnan/LinkCache/tags - 在
GitHub
下载 https://github.com/dongnan/LinkCache/releases
安装方法
在你的入口文件中引入
如何使用
(提示:如果以下锚点定位的链接错误,导致页面找不到等问题,请访问 https://github.com/dongnan/LinkCache 查看文档)
- config - 配置信息
- instance - 缓存实例化
- getDriver - 获取缓存驱动实例
- set - 将参数中的
value
设置为key
的值 - setnx - 当缓存中不存在
key
时,将参数中的value
设置为key
的值 - setDE - 将参数中的
value
设置为key
的值,key
将自动延迟过期 - get - 获取
key
对应的值 - getDE - 获取
key
对应的值,与setDE
配合使用 - del - 删除
key
- has - 判断
key
是否存在 - hasDE - 判断延迟过期的
key
理论上是否存在 - ttl - 获取
key
的生存时间(单位:s) - ttlDE - 获取延迟过期的
key
理论上的生存时间(单位:s) - expire - 设置一个
key
的生存时间(单位:s) - expireDE - 以延迟过期的方式设置一个
key
的生存时间(单位:s) - expireAt - 用UNIX时间戳设置一个
key
的过期时间 - expireAtDE - 以延迟过期的方式用UNIX时间戳设置一个
key
的过期时间 - persist - 删除一个
key
的生存时间,使其永不过期 - lock - 对
key
设置锁标记(此锁并不对key
做修改限制,仅为key
的锁标记) - isLock - 判断
key
是否有锁标记 - unLock - 移除
key
的锁标记 - incr - 设置
key
的值按整数递增 - incrByFloat - 设置
key
的值按浮点数递增 - decr - 设置
key
的值按整数递减 - mSet - 批量设置多个
key
对应的值 - mSetNX - 当缓存中不存在
key
时,批量设置多个key
对应的值 - mGet - 获取所有给定
key
的值 - mHas - 批量判断
key
是否存在 - mDel - 批量删除
key
config
配置信息
instance
实例化缓存对象
getDriver
获取缓存驱动实例
所有缓存驱动都必须实现 linkcache\interfaces\driver\Base
接口的方法,获取到缓存驱动实例后,可直接使用缓存驱动的方法,包括缓存驱动中没有定义但缓存驱动扩展对象中已定义的方法。
set
将参数中的 value
设置为 key
的值
参数
- key - 字符串
- value - 除了
resource
类型的所有的值 - time - (可选参数)
key
的生存时间,单位是秒(s)
返回值
Boolean 如果设置成功,返回 true
; 如果设置失败,返回 false
例子
setnx
当缓存中不存在 key
时,将参数中的 value
设置为 key
的值
参数
- key - 字符串
- value - 除了
resource
类型的所有的值 - time - (可选参数)
key
的生存时间,单位是秒(s)
返回值
Boolean - 如果设置成功,返回 true
; 如果设置失败,返回 false
例子
setDE
将参数中的 value
设置为 key
的值,key
将自动延迟过期
参数
- key - 字符串
- value - 除了
resource
类型的所有的值 - time -
key
的生存时间,单位是秒(s) - delayTime - (可选参数) 延迟过期时间,如果未设置,则使用配置中的设置
返回值
Boolean - 如果设置成功,返回 true
; 如果设置失败,返回 false
例子
get
获取 key
对应的值
参数
- key - 字符串
返回值
Mixed - key
对应的值; 如果获取失败或 key
不存在,返回 false
例子
getDE
获取 key
对应的值,与 setDE
配合使用
参数
- key - 字符串
- isExpired -
key
理论上是否已经过期,这是一个引用变量,不需要初始化
返回值
Mixed - key
对应的值; 如果获取失败或 key
不存在,返回 false
例子
del
删除 key
参数
- key - 字符串
返回值
Boolean - 如果删除成功,返回 true
; 如果删除失败,返回 false
。注意: 当 key
不存在时,也会返回 true
例子
has
判断 key
是否存在
参数
- key - 字符串
返回值
Boolean - 如果 key
存在,返回 true
;如果 key
不存在,返回 false
例子
hasDE
判断延迟过期的 key
理论上是否存在。设置自动延期的 key
,过期时间实际会被修改,用方法 has
判断的话,可能 key
仍然存在,但是理论上已经过期了
参数
- key - 字符串
返回值
Boolean - 如果 key
存在,返回 true
;如果 key
不存在,返回 false
例子
ttl
获取 key
的生存时间(单位:s)
参数
- key - 字符串
返回值
Mixed - 生存剩余时间(单位:秒) -1
表示永不过期,-2
表示 key
不存在,失败返回 false
例子
ttlDE
获取延迟过期的 key
理论上的生存时间(单位:s)。
参数
- key - 字符串
返回值
Mixed - 生存剩余时间(单位:秒) -1
表示永不过期,-2
表示 key
不存在,失败返回 false
例子
expire
设置一个 key
的生存时间(单位:s)
参数
- key - 字符串
- time - 整数,
key
的生存时间(单位:s)
返回值
Boolean - 如果设置成功,返回 true
; 如果设置失败或 key
不存在,返回 false
例子
expireDE
以延迟过期的方式设置一个 key
的生存时间(单位:s)
参数
- key - 字符串
- time - 整数,
key
的生存时间(单位:s) - delayTime - (可选参数) 延迟过期时间,如果未设置,则使用配置中的设置
返回值
Boolean - 如果设置成功,返回 true
; 如果设置失败或 key
不存在,返回 false
例子
expireAt
用UNIX时间戳设置一个 key
的过期时间
参数
- key - 字符串
- time - UNIX时间戳(单位:s)
返回值
Boolean - 如果设置成功,返回 true
; 如果设置失败或 key
不存在,返回 false
例子
expireAtDE
以延迟过期的方式用UNIX时间戳设置一个 key
的过期时间
参数
- key - 字符串
- time - UNIX时间戳(单位:s)
- delayTime - (可选参数) 延迟过期时间,如果未设置,则使用配置中的设置
返回值
Boolean - 如果设置成功,返回 true
; 如果设置失败或 key
不存在,返回 false
例子
persist
删除一个 key
的生存时间,使其永不过期
参数
- key - 字符串
返回值
Boolean - 如果设置成功,返回 true
; 如果设置失败或 key
不存在,返回 false
例子
lock
对 key
设置锁标记(此锁并不对 key
做修改限制,仅为 key
的锁标记)
参数
- key - 字符串
- time - 整数,
key锁标记
的生存时间(单位:s)
返回值
Boolean - 如果设置成功,返回 true
; 如果 key
已存在或设置失败,返回 false
例子
isLock
判断 key
是否有锁标记
参数
- key - 字符串
返回值
Boolean - 如果有锁标记,返回 true
; 如果没有锁标记或判断失败,返回 false
例子
unLock
移除 key
的锁标记
参数
- key - 字符串
返回值
Boolean - 如果移除成功,返回 true
; 如果失败,返回 false
例子
incr
设置 key
的值按整数递增
参数
- key - 字符串
- step - (可选参数) 整数,递增步长,默认值为
1
,可以为负值
返回值
Mixed - 递增后的值,失败返回 false
,如果 key
不存在,则按 step
设置新值
例子
incrByFloat
设置 key
的值按浮点数递增
参数
- key - 字符串
- float - 浮点数,递增步长,可以为负值
返回值
Mixed - 递增后的值,失败返回 false
,如果 key
不存在,则按 float
设置新值
例子
decr
设置 key
的值按整数递减
参数
- key - 字符串
- step - (可选参数) 整数,递减步长,默认值为
1
,可以为负值
返回值
Mixed - 递减后的值,失败返回 false
,如果 key
不存在,则按 -step
设置新值
例子
mSet
批量设置多个 key
对应的值
参数
- sets -
key
和value
组成的键值对数组
返回值
Boolean - 如果设置成功,返回 true
; 如果设置失败,返回 false
例子
mSetNX
当缓存中不存在 key
时,批量设置多个 key
对应的值
参数
- sets -
key
和value
组成的键值对数组
返回值
Boolean - 如果设置成功,返回 true
; 如果设置失败,返回 false
例子
mGet
获取所有给定 key
的值
参数
- keys - 多个
key
组成的数组
返回值
array - 参数 keys
中的所有 key
与对应的 value
组成的数组,如果 key
不存在或是获取失败,对应的 value
值为 false
例子
mHas
批量判断 key
是否存在
参数
- keys - 多个
key
组成的数组
返回值
array - 返回存在的 key
的数组,如果判断失败返回 false
例子
mDel
批量删除 key
参数
- keys - 多个
key
组成的数组
返回值
Boolean - 如果删除成功,返回 true
; 如果删除失败,返回 false
例子
如何防止惊群
什么是惊群
首先,我们使用缓存的主要目的就是为了高并发情况下的高可用,换句话说,在使用了缓存的高并发的系统下,如果缓存突然都消失了,会发生什么?首先数据库的压力必然骤增,接着负载迅速升高,响应时间变慢,进程/线程由于响应时间变慢导致集压并剧增,这就是惊群。惊群的后果就是系统不可用甚至宕机。当然这是一个非常极端的例子,但是能很好的解释惊群现象。真实环境中,可能会有个一些页面是访问非常频繁的,如果这些页面的缓存在同一时间或相近的时间突然过期了,在高并发的情况下也会产生惊群现象。
如何避免惊群
知道了什么是惊群,就不难防止惊群了。首先,避免缓存在同一时间过期;其次,如果缓存过期,不要让所有并发的进程/线程都去触发更新同一缓存数据。
例子
LinkCache
为此专门做了优化,使用 LinkCache
提供的一些特殊方法,可以有效的防止惊群现象。以下是简单的示例(伪代码):
默认情况说明
- Cache -
\linkcache\Cache
- drivers
- files -
\linkcache\drivers\Files
- memcache -
\linkcache\drivers\Memcache
- memcached -
\linkcache\drivers\Memcached
- redis -
\linkcache\drivers\Redis
- ssdb -
\linkcache\drivers\Ssdb
- apc -
\linkcache\drivers\Apc
- yac -
\linkcache\drivers\Yac
- files -
cache
- 默认使用的缓存驱动:
files
- 默认使用的备用驱动:
files
memcache
、redis
、ssdb
等缓存驱动的默认配置均参考官方默认配置- 自定义配置支持非驱动类型的key,但配置信息中需要有
driver_type
属性,否则会抛异常,示例如下:
drivers
- 所有驱动默认使用备用缓存
- 备用缓存优先使用实例化时构造函数传入的配置
config
中的fallback
定义,如果没有定义,则使用\linkcache\Cache::$config
中的fallback
定义
files
- 默认保存路径:优先使用上传文件临时目录,未定义则使用系统临时目录,并在目录下创建linkcache目录,作为
files
驱动的默认保存路径,代码如下:(ini_get('upload_tmp_dir') ? ini_get('upload_tmp_dir') : sys_get_temp_dir()) . '/linkcache'
memcache
- 当
memcache
连接断开后,最大重连次数为3次,重新建立连接后,连接重试次数清零
memcached
- 当
memcached
连接断开后,最大重连次数为3次,重新建立连接后,连接重试次数清零
redis
- 当
redis
连接断开后,最大重连次数为3次,重新建立连接后,连接重试次数清零
ssdb
- 当
ssdb
连接断开后,最大重连次数为3次,重新建立连接后,连接重试次数清零
apc
- 无
yac
- 可自定义缓存
key
前缀,默认无key
前缀
开发
如果你觉得LinkCache还不错,但又不支持你想用的缓存驱动,不妨尝试在LinkCache新增该缓存驱动的支持。
1.增加新的缓存驱动
目前有两种方式可以方便的开发新的缓存驱动支持
-
继承
linkcache\abstracts\DriverSimple
抽象类-
在
src/linkcache/drivers
目录下创建新的缓存驱动类Example.php
- 实现
linkcache\abstracts\DriverSimple
抽象类中的抽象方法
-
-
实现接口
linkcache\interfaces\driver\Base
(Base接口是必须的,你也可以实现更多的接口:Incr,Lock,Multi)-
在
src/linkcache/drivers
目录下创建新的缓存驱动类Example.php
- 实现
linkcache\interfaces\driver\Base
接口中的方法
-
2.测试新增的驱动
为了保证代码的可靠性,不妨对新增的驱动做个测试吧。 我使用的是PHPUnit做的测试,版本:4.8.15
-
测试步骤
-
在
tests
目录新增测试类TestDriverExample.php
-
进入LinkCache项目目录,执行测试命令
显示以下信息测试就通过啦~
-
LICENSE
使用非常灵活宽松的 New BSD License 协议