下面由laravel教程欄目給大家介紹laravel 中簡單處理接口并發,希望對需要的朋友有所幫助!
Laravel 中簡單處理接口并發
簡介
日常業務邏輯中經常會出現接口并發處理,最常見的是同一個接口被瞬間調了好幾次,導致產生的數據錯亂 為了避免這種問題發生,一般前端、移動端會限制按鈕觸發接口限制,后端接口調用限制。
說在前面
該方法僅適用于簡單的接口頻率限制。并不適用于商品秒殺,但原理類似。
原 理
這只是一個簡單的實現過程,主要用了 redis 原生的 set 方法類給 key 設置值的時候設置過期時間,如果改 key 存在 ,則返回 false。如果不存在則設置值同時設置過期時間,返回 true。 避免了死鎖的出現。
代碼部分:
/** ?*?簡單處理并發 ?*?@User?yaokai ?*?@param?$key?要設置的key ?*?@param?int?$ttl?限制過期時間 ?*?@param?int?$value?要設置的值 ?*?@return?bool?true成功??false失敗 ?*/ function?redisConcurren($key,?$ttl?=?240,?$value?=?1) { ????//?實例化原生?redis ????$redis?=?new?Redis(); ???? ????//?指定需要使用的?redis?服務器 ????$redis->connect(config('database.redis.default.host')); ????//?設置密碼 ????$redis->auth(config('database.redis.default.password')); ????//?設置默認的?redis?庫 ????$redis->select(config('database.redis.default.database')); ????//?利用原生的set方法設置一個key的過期時間 ????$status?=?$redis->set($key,?$value,?array(?'nx',?'ex'?=>?$ttl?)); ???? ????return?$status; }
寫在后面
我只是一個慢慢學習的小菜鳥。如果有不對的地方,或者有更好的方法希望各位不吝指教,相互討論,感激不盡!
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END