MemcacheD 每秒保存多个数据

MemcacheD multiple data saves per second

Stack Overflow 用户周五快乐!

让我稍微设置一下场景:

我有一个应用程序使用以下代码将用户操作记录到 MemcacheD 中:

<?php
    // This tracks a users actions for 24 hours
    function listActions($user){
        $minutes = 1440;    $total
        $actionsCache = Cache::remember('userActions', $minutes, function() use($total) {
            $array = [100, 140, 523, 10, 109]; // example list of user ID's
            $ar = [];
            foreach($array as $p){
                $array[$p] = [];
            }
            return $ar;
        });
        return $actionsCache;
    }
?>

然后,每次用户在站点中执行操作时,都会使用以下内容进行记录:

<?php
    // This records a new action and then saves it to the userActions cache
    function saveAction($action, $user){
        $minutes = 1440;
        $Cache = Cache::get('userActions');
        $Cache[$user][time()] = $action;
        Cache::put('userActions', $Cache, $minutes);
        return $Cache[$user];
    }

?>

这是正在发生的事情的简化形式,但它很好地说明了我的观点。

我的问题:似乎其中一些操作没有被记录下来。这些操作发生得相对较快,并且针对每个用户的每个操作操作相同的缓存变量(如上所示)

我的问题:有没有可能代码没有抓取最新的缓存值,因此保存旧值?

我最终通过切换到 redis 解决了这个问题,因为它内置了锁定功能。

如果我一直使用 MemcacheD(我做了一段时间),我会在数据结构本身上实现一个锁,这样当另一个进程正在使用它时它就不能被编辑(主要是,任何东西)会读取和写入数据,需要锁定数据)。

我希望这对任何可能遇到这个问题的人有所帮助!