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
(我做了一段时间),我会在数据结构本身上实现一个锁,这样当另一个进程正在使用它时它就不能被编辑(主要是,任何东西)会读取和写入数据,需要锁定数据)。
我希望这对任何可能遇到这个问题的人有所帮助!
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
(我做了一段时间),我会在数据结构本身上实现一个锁,这样当另一个进程正在使用它时它就不能被编辑(主要是,任何东西)会读取和写入数据,需要锁定数据)。
我希望这对任何可能遇到这个问题的人有所帮助!