jdorn/file-system-cache

在文件系统中缓存数据的简单方法

dev-master / 1.0.x-dev 2013-07-05 13:28 UTC

This package is auto-updated.

Last update: 2024-08-30 01:20:00 UTC


README

一个简单的用于在文件系统中缓存数据的PHP类。主要功能包括

  • 支持存储数据时的TTL(生存时间)
  • 支持检索数据时的“ newer than”(新于)参数
  • 每个调用都是原子的操作,带有适当的文件锁定
  • 可以组合缓存键,以便于快速失效
  • Composer支持
  • PHPUnit测试

Build Status

入门指南

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