我想各位写php的小伙伴,经常会写下面的这种代码,如下图(php内置的array_walk()方法)
<?php
$elements = ['a', 'b', 'c'];
array_walk($elements, function ($value, $key) {
echo "{$key} => {$value}\n";
});
?>
那下面我们就试着自己写一个吧!比如有这么一个场景,做一个简单的缓存方法,实现“缓存存在读缓存,不存在则传入一个回调方法设置缓存数据,并返回结果”,下面我们直接看代码吧!伪代码如下(假设用redis):
<?php
Class CacheManager {
/**
* @param $key
* @param Closure $valueClosure
* @param $timeout
* @return bool|Closure|mixed|string
*/
static function remember($key, Closure $valueClosure, $timeout) {
try {
$redis = new Redis();
//$redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_JSON);
$redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_PHP);
if($redis->exists($key))
return $redis->get($key);
$data = $valueClosure();
$redis->set($key, $data, $timeout);
return $data;
} catch (Exception $e){
return false;
}
}
}
//tips: 使用方式如下
$value = CacheManager::remember('key', function() {
return DB::get('xxxxxx');
}, 1000);
其实很简单,就是优先获取缓存数据,如果不存在则使用数据库查询数据并设置缓存。。。