为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕的地8271018 2018-08-02 17:27:54
我们的缓存分为两级,第一级只是一个PHP数组,有效范围是Request。而第二级是memcached。这么做的原因是,很多数据在一个Request周期内需要加载多次,这样可以减少memcached的网络请求。另外我们的框架也会尽可能的发送memcached的gets命令来获取数据,从而减少网络请求”, 请使用伪代码实现以上缓存架构这道题的思路是怎样的,题目也没看懂,麻烦帮忙理下思路.
查看完整描述

2 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

就是说要你写一个PHP缓存的类,通过这个类来统一的访问memcached。
然后这个类需要支持一次返回多个数据。
同时,需要对从memcached拿到的数据存一下数组。方便在本次request里面重复获取缓存的时候直接使用。

稍微难点就在那个对多个数据的查询和缓存上面。


查看完整回答
反对 回复 2018-08-05
?
红颜莎娜

TA贡献1842条经验 获得超12个赞

// 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;

}


查看完整回答
反对 回复 2018-08-05
  • 2 回答
  • 0 关注
  • 1174 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信