>  기사  >  백엔드 개발  >  memcached - php数组缓存和memcache缓存 一道面试题,帮忙理下思路

memcached - php数组缓存和memcache缓存 一道面试题,帮忙理下思路

WBOY
WBOY원래의
2016-06-06 20:26:451153검색

我们的缓存分为两级,第一级只是一个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里面读取, 这个操作时间比较简短

美图的笔试题。

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.