簡析Laravel中處理接口并發

下面由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
喜歡就支持一下吧
點贊15 分享