我们的缓存分为两级,第一级只是一个PHP数组,有效范围是Request。而第二级是memcached。这么做的原因是,很多数据在一个Request周期内需要加载多次,这样可以减少memcached的网络请求。另外我们的框架也会尽可能的发送memcached的gets命令来获取数据,从而减少网络请求”, 请使用伪代码实现以上缓存架构
这道题的思路是怎样的,题目也没看懂,麻烦帮忙理下思路.
我们的缓存分为两级,第一级只是一个PHP数组,有效范围是Request。而第二级是memcached。这么做的原因是,很多数据在一个Request周期内需要加载多次,这样可以减少memcached的网络请求。另外我们的框架也会尽可能的发送memcached的gets命令来获取数据,从而减少网络请求”, 请使用伪代码实现以上缓存架构
这道题的思路是怎样的,题目也没看懂,麻烦帮忙理下思路.
<code>// example: // get_cache('foo'); // get_cache(['foo', 'bar']); function get_cache($keys) { static $cache = []; static $memcached; $keys = (array)$keys; $result = $missing = []; foreach ($keys as $key) { if (isset($cache[$key])) { $result[$key] = $cache[$key]; } else { $missing[] = $key; } } if (!$missing) { return $result; } if (!$memcached) { $memcached = new Memcached; } $mresult = $memcached->getMulti($missing); if ($mresult) { foreach ($mresult as $key => $value) { $result[$key] = $cache[$key] = $value; } } return $result; }</code>
我表示也没有看懂!
就是说要你写一个PHP缓存的类,通过这个类来统一的访问memcached。
然后这个类需要支持一次返回多个数据。
同时,需要对从memcached拿到的数据存一下数组。方便在本次request里面重复获取缓存的时候直接使用。
稍微难点就在那个对多个数据的查询和缓存上面。
简单的理解是, 已经获取到了,先缓存到memcache里面,如果在一定周期内,需要用到相同的数据,先从memcache里面读取, 这个操作时间比较简短
美图的笔试题。