phossa / phossa-cache
遵循PSR-6规范的PHP缓存库。
Requires
- php: >=5.4.0
- phossa/phossa-shared: ^1.0.6
- psr/cache: ^1.0
Requires (Dev)
- psr/log: ^1.0
Suggests
- psr/log: Allows log messages
Provides
- psr/cache-implementation: 1.0.0
This package is not auto-updated.
Last update: 2024-09-17 10:06:31 UTC
README
查看新的库 phoole/cache 简介
Phossa-cache是一个遵循PSR-6规范的缓存库。它支持多种驱动程序和有用的功能,如绕过、加密、雪崩保护、垃圾收集、可标记项等。
有关PSR-6和PSR-6 Meta的更多信息
安装
通过composer
工具安装。
composer require "phossa/phossa-cache=1.*"
或者将以下行添加到您的composer.json
{ "require": { "phossa/phossa-cache": "^1.0.8" } }
功能
-
完全遵循PSR-6。可能是目前GitHub上功能最丰富的PSR-6缓存包。
-
支持所有可序列化的PHP数据类型。
-
扩展:
-
绕过:如果URL中看到触发器(例如'?nocache=true'),则绕过缓存。
-
雪崩:当缓存的对象的生存时间小于可配置的时间时,以一定比例,缓存将在'isHit()'上返回false,这将触发对象的重新生成。
-
加密:对序列化内容进行简单加密的扩展
-
垃圾收集:一个简单扩展来自动清理缓存池。
-
可标记:项是可标记的,并且可以通过标记进行清除。
-
分散未命中:通过稍微调整过期时间来平衡项未命中的峰值。
-
-
驱动程序
-
FilesystemDriver
文件系统驱动程序将缓存的项存储在文件系统中。它将缓存的项存储在md5文件名的平面文件中。可配置的设置有
dir_root
:文件系统缓存的基目录hash_level
:散列子目录级别。默认为2file_pref
:缓存项文件名前缀file_suff
:缓存项文件名后缀
/* * construct the driver manually */ $driver = new Driver\FilesystemDriver([ 'hash_level' => 1, 'file_pref' => 'cache.', 'dir_root' => '/var/tmp/cache', ]);
-
NullDriver
黑洞驱动程序。用作所有其他驱动程序的回退驱动程序。
-
回退驱动程序
如果所需的驱动程序未就绪,用户可以配置回退驱动程序。对于所有其他驱动程序,
NullDriver
是最终的回退。// default memcache driver $driver = new Driver\MemcacheDriver([ 'server' => [ '127.0.0.1', 11211 ] ]); // set a fallback filesystem driver $driver->setFallback(new Driver\FilesystemDriver([ 'dir_root' => '/var/tmp/cache' ])); $cache = new CachePool($driver);
-
CompositeDriver
CompositeDriver
由两个驱动程序组成,即前端驱动程序和后端驱动程序。用户通过定义一个tester
可调用函数来过滤可缓存的对象,该函数将确定哪些对象存储在两端或仅存储在后端。/* * set the composite driver */ $driver = new Driver\CompositeDriver( // front-end driver new Driver\MemcacheDriver([ 'server' => [ '127.0.0.1', 11211 ] ]), // backend driver new Driver\FilesystemDriver([ 'dir_root' => '/var/tmp/cache' ]), // other settings [ // if size > 10k, stores at backend only 'tester' => function($item) { if (strlen($item->get()) > 10240) return false; return true; } ] );
-
-
日志记录
phossa-cache支持遵循psr-3规范的记录器。还提供了
log()
方法进行记录。/* * set the logger */ $cache->setLogger($psrLogger); $cache->log('info', 'this is an info');
或者在缓存初始化时配置记录器
/* * the third argument is used for configuring CachePool */ $cache = new CachePool($driver, [], 'logger' => $psrLogger ); $cache->log('info', 'this is an info');
-
错误
在缓存过程中不会抛出异常。因此,只使用错误。
/* * create cache pool, exceptions may thrown here */ $cache = new CachePool(); $cache->setLogger($psrLogger); $item = $cache->getItem('widget_list'); $val = $item->get(); if ($cache->hasError()) { $cache->log('error', $cache->getError()); $widget_list = compute_expensive_widget_list(); $item->set($widget_list); $item->expiresAfter(3600); // expires after an hour $cache->save($item); if ($cache->hasError()) $cache->log('error', $cache->getError()); } else { $widget_list = $val; }
-
国际化
消息在
Message\Message.php
中。可以实现国际化。有关详细信息,请参阅phossa-shared包。 -
支持PHP 5.4+、PHP 7.0、HHVM。
-
PHP7已准备好进行返回类型声明和参数类型声明。
-
遵循PSR-1、PSR-2、PSR-3、PSR-4、PSR-6规范。
用法
-
简单用法
/* * use the default FilesystemDriver which also set default cache * directory to sys_get_temp_dir() .'/cache' */ $cache = new CachePool(); $item = $cache->getItem('widget_list'); if (!$item->isHit()) { $value = compute_expensive_widget_list(); $item->set($value); $cache->save($item); } $widget_list = $item->get();
-
配置驱动程序
$driver = new Driver\FilesystemDriver([ 'hash_level' => 1, // subdirectory hash levels 'file_pref' => 'cache.', // cache file prefix 'file_suff' => '.txt', // cache file suffix 'dir_root' => '/var/tmp/cache' // reset cache root ]); $cache = new CachePool($driver);
-
使用扩展
/* * SerializeExtension is the default ext, always used. * Second argument is an array of ExtensionInterface or config array */ $cache = new CachePool( $driver, [ new Extension\BypassExtension(), new Extension\StampedeExtension(['probability' => 80 ]) ] );
或使用
addExtension()
$cache = new CachePool($driver); $cache->addExtension(new Extension\BypassExtension());
-
分层缓存支持
FilesystemDriver
和其他即将推出的驱动程序支持目录风格的分层结构。// hierarchy key $item = $cache->getItem('mydomain/host1/newfile_xxx'); // ending '/' means delete the hierarchy structure $cache->deleteItem('mydomain/host1/');
依赖关系
- PHP >= 5.4.0
- phossa/phossa-shared 1.0.6
- psr/cache 1.*