jdorn / file-system-cache
在文件系统中缓存数据的简单方法
Requires
- php: >=5.3.0
This package is auto-updated.
Last update: 2024-08-30 01:20:00 UTC
README
一个简单的用于在文件系统中缓存数据的PHP类。主要功能包括
- 支持存储数据时的TTL(生存时间)
- 支持检索数据时的“ newer than”(新于)参数
- 每个调用都是原子的操作,带有适当的文件锁定
- 可以组合缓存键,以便于快速失效
- Composer支持
- PHPUnit测试
入门指南
FileSystemCache可以通过Composer安装或手动下载。
使用Composer
如果您已经使用Composer,只需将jdorn/file-system-cache
添加到您的composer.json
文件中。FileSystemCache与Composer的自动加载器无缝工作。
{ "require": { "jdorn/file-system-cache": "dev-master" } }
手动
如果您不使用Composer,只需在您的脚本中包含lib/FileSystemCache.php
。
require_once("path/to/FileSystemCache.php");
设置缓存目录
默认情况下,所有缓存数据都存储在相对于当前执行脚本的cache
目录中。您可以通过设置$cacheDir静态属性来更改此设置。
<?php FileSystemCache::$cacheDir = '/tmp/cache';
FileSystemCache需要写入缓存目录的权限。
如果Apache(或您正在使用的任何其他Web服务器)拥有该目录,则这会更容易。
缓存键
FileSystemCache的所有方法都操作缓存键。有一个generateCacheKey
方法,它返回一个缓存键对象。
您可以将几乎所有内容作为键数据(数组、对象、字符串、数字)传递。任何非字符串都将进行序列化和散列。
<?php //array of data $key_data = array( 'user_id'=>1001, 'ip address'=>'10.1.1.1' ); //string $key_data = 'my_key'; //object $key_data = new SomeObject(); //number $key_data = 1005; //generate a key object $key = FileSystemCache::generateCacheKey($key_data);
您可以将缓存键组合在一起以更好地组织数据并简化失效操作。
<?php $key_data = 'my_key'; //store in root directory (same as leaving out second parameter) $key = FileSystemCache::generateCacheKey($key_data, null); //store in 'group1' directory $key = FileSystemCache::generateCacheKey($key_data, 'group1'); //store in 'group1/subgroup' directory $key = FileSystemCache::generateCacheKey($key_data, 'group1/subgroup');
生成的文件结构将如下所示
$cacheDir/
| +- my_key.cache
| +- group1/
| | +- my_key.cache
| | +- subgroup/
| | | +- my_key.cache
存储
在存储之前,数据会被序列化,因此您可以使用字符串、数组、对象或数字。
$data = array( 'this'=>'is some data I want to cache', 'it'=>'can be a string, array, object, or number.' ); $key = FileSystemCache::generateCacheKey('mykey'); FileSystemCache::store($key, $data);
如果您希望数据在设置的时间后自动过期,请使用可选的ttl
参数。
// Expire automatically after 1 hour (3600 seconds) FileSystemCache::store($key, $data, 3600);
检索
您可以使用存储数据时使用的相同缓存键来检索数据。如果没有缓存或数据已过期,则返回False
。
$data = FileSystemCache::retrieve($key); // If there was a cache miss if($data === false) { ... }
您可以指定一个newer than
时间戳,以仅检索在特定时间后存储的缓存数据。这对于存储源文件的编译版本非常有用。
$file = 'source_file.txt'; $modified = filemtime($file); $key = FileSystemCache::generateCacheKey($file); $data = FileSystemCache::retrieve($key, $modified); // If there was a cache miss if($data === false) { ... }
获取和修改
还有一个原子的获取和修改
方法。
FileSystemCache::getAndModify($key, function($value) { $value->count++; return $value; });
如果数据最初以TTL进行缓存,则可以将true
作为第三个参数传递来重置TTL。
否则,它将基于原始存储时间。
失效
您可以失效单个缓存键或一组缓存键。
FileSystemCache::invalidate($key); FileSystemCache::invalidateGroup('mygroup');
默认情况下,失效组是递归执行的,所有子组也将被失效。如果将false
作为第二个参数传递,则可以使其非递归。
FileSystemCache::invalidateGroup('mygroup', false);
运行测试
您需要安装PHPUnit才能运行测试。配置在phpunit.xml.dist
中定义。运行测试很容易
phpunit