Redis チュートリアル の次のコラムでは、ロック メカニズムを実装するための Redis の SETNX の正しい使用方法を紹介します。困っている友達に役立ちます!
setNX は set if notowned の略で、存在しない場合にのみ設定され、設定が成功した場合は 1 を返し、設定が成功した場合は 0 を返します。設定に失敗します。ロック効果を得るために使用できますが、多くの人が使用中に考慮していないいくつかの問題を抱えています。 たとえば、データベースにクエリを実行するための特定のインターフェイスは、リクエストの数が比較的多いためキャッシュを追加し、キャッシュの有効期限が切れた後にキャッシュを更新するように設定します。同時実行の量が比較的多く、キャッシュの有効期限が切れると、多数の同時リクエストがデータベースに直接クエリを実行し、雪崩を引き起こします。ロック機構を使用してキャッシュを更新する要求を 1 つだけ制御すれば、雪崩の問題を回避できます。以下は、多くの人が無意識に考えているロック方法です。$rs = $redis->setNX($key, $value); if ($rs) { //处理更新缓存逻辑 // ...... //删除锁 $redis->del($key); }
$redis->multi(); $redis->setNX($key, $value); $redis->expire($key, $ttl); $redis->exec();
$rs = $redis->set($key, $value, array('nx', 'ex' => $ttl)); if ($rs) { //处理更新缓存逻辑 // ...... //删除锁 $redis->del($key); }
$rs = $redis->set($key, $random, array('nx', 'ex' => $ttl)); if ($rs) { //处理更新缓存逻辑 // ...... //先判断随机数,是同一个则删除锁 if ($redis->get($key) == $random) { $redis->del($key); } }
以上がRedis の SETNX を正しく使用してロック メカニズムを実装する方法を説明しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。