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

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

WBOY
WBOYOriginal
2016-06-06 20:26:451151Durchsuche

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

美图的笔试题。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn