如果您使用Zend的php版本,那很简单.
您无需序列化数据.
只能缓存内容.文件句柄等资源不能.
要存储true / false,请使用1,0,以便可以使用===区分缓存失败和结果.
商店:
zend_shm_cache_store('cache_namespace::this_cache_name',$any_variable,$expire_in_seconds);
检索:
$any_variable = zend_shm_cache_fetch('cache_namespace::this_cache_name');
if ( $any_variable === false ) {
# cache was expired or did not exist.
}
对于长寿命数据,您可以使用:
zend_disk_cache_store();zend_disk_cache_fetch();
对于没有zend的人,相应的APC版本如上:
商店:
apc_store('cache_name',$any_variable,$expire_in_seconds);
检索:
$any_variable = apc_fetch('cache_name');
if ( $any_variable === false ) {
# cache was expired or did not exist.
}
从未使用过任何其他提到的方法.
如果您没有可用的共享内存,则可以将数据序列化/反序列化为磁盘.当然共享内存要快得多,而zend的好处是它为你处理并发问题并允许命名空间:
商店:
file_put_contents('/tmp/some_filename',serialize($any_variable));
检索:
$any_variable = unserialize(file_get_contents('/tmp/some_filename') );
编辑:为了自己处理并发问题,我认为最简单的方法是使用锁定.我仍然可以看到锁存在和获取锁定之间的这个伪代码中的竞争条件的可能性,但是你明白了.
Psuedo代码:
while ( lock exists ) {
microsleep;
}
get lock.
check we got lock.
write value.
release lock.