2016-12-06 9 views
0

私はRedisがキャッシュドライバとして使用されるLaravel 5.2プロジェクトを持っています。データを失うことなく複数の接続と複数のincrコールをRedisする

ありRedisのを接続して、値を増加して設定するには、このメソッドが呼び出されるたびに値を追加する方法を持っているコントローラは、ちょうど

$redis = Redis::connection(); 
$redis->incr($value); 
$redis->sadd("set", $value); 

のように、である。しかし問題は、時には多くがあるということです2つの呼び出し元が$valueが2のときにこのメソッドを呼び出すと、incrの後には3になりますが、基本的には2つ後になります(2つ後になる必要があるため)、このメソッドの呼び出しと同時に多くの呼び出しが発生し、データが失われます。

私はRedisトランザクションを使用することを考えましたが、multiコマンドを呼び出していつキューを開始するべきか、いつexecになるのか想像できません。

また、incrsaddを別のセットの文字列として収集し、cron jobでそれらを処理するというアイデアがありましたが、あまりにも多くのRAMを必要とします。

どのような提案でも、どのようにしてこのデータ損失を回避できますか?

答えて

0

LaravelはRedisドライバとしてPredisを使用します。

$responses = $redis->transaction(function ($tx) { 
    $redis->incr($value); 
    $redis->sadd("set", $value); 
}); 
:あなたは、ドライバのトランザクションメソッドを呼び出すと、それにコールバックを与える必要がありPredisとの取引を実行するために

関連する問題