php 結合redis 限制使用者每日砍價次數

2022-05-26 15:12:12 字數 1505 閱讀 8230

最近做的砍價活動的專案馬上上線了 ,之前提出的是不限制使用者的砍價次數,但是後面又說要改成限制次數。。。。。

需求就是每個商品的砍價數次做限制,後台可以限制使用者每天的砍價次數。意思就是屬於該活動的訂單,每個好友過來幫你砍價,需要限制每日最大的次數(之前沒有限制)。所以想到用redis ,redis 裡面有鍵值可以設定過期時間,感覺很好用,直接上**了:

首先,因為是限制使用者一天的砍價次數,所以首先就要先獲取今天的結束的時間戳:

$t = time();//

當前的時間戳

$end = mktime(23,59,59,date("m",$t),date("d",$t),date("y",$t));//

當天的結束時間戳

$d =$this->timediff($t,$end);//

計算當前時間距離當天結束的時間還剩幾秒

function timediff($begin_time,$end_time

)else

//計算天數

$timediff = $endtime-$starttime

;

$days = intval($timediff/86400);

//計算小時數

$remain = $timediff%86400;

$hours = intval($remain/3600);

//計算分鐘數

$remain = $remain%3600;

$mins = intval($remain/60);

//計算秒數

$secs = $remain%60;

//$res = array("day" => $days,"hour" => $hours,"min" => $mins,"sec" => $secs);

$s= ($hours*3600)+($mins*60)+$secs

;

return$s;

}

由於redis 鍵過期時間是以秒為單位的(可能我的redis版本比較低  2.6之後好像是已毫秒為單位),所以第一步我要先獲取結束的秒數 。在這步就要寫入了鍵值了:

$friend_name = $this->deploy['prefix'].'fried_order'.$order_id.'-'.$member_id;//

這邊命名的方式用到訂單的id,和使用者的id,來保證該鍵的唯一性

$this->redis->set($friend_name,'1',$d);//

這一步就寫入redis中了 $d是過期的秒數,第一步就已經有算出來了。

這步就是處理砍價的業務邏輯了:

$friend = $this->redis->get($friend_name);//

去redis快取中查詢,有沒有這個鍵

if($friend

)else

}else

以上就是通過redis  限制使用者每日的砍價操作 。

php 使用redis鎖限制併發訪問類

對於一些需要限制同乙個使用者併發訪問的場景,如果使用者併發請求多次,而伺服器處理沒有加鎖限制,使用者則可以多次請求成功。例如換領優惠券,如果使用者同一時間併發提交換領碼,在沒有加鎖限制的情況下,使用者則可以使用同乙個換領碼同時兌換到多張優惠券。偽 如下 if a 可以換領 b 執行換領 c 更新為已...

php 使用redis鎖限制併發訪問類

對於一些需要限制同乙個使用者併發訪問的場景,如果使用者併發請求多次,而伺服器處理沒有加鎖限制,使用者則可以多次請求成功。例如換領優惠券,如果使用者同一時間併發提交換領碼,在沒有加鎖限制的情況下,使用者則可以使用同乙個換領碼同時兌換到多張優惠券。偽 如下 if a 可以換領 b 執行換領 c 更新為已...

php 使用redis鎖限制併發訪問類

對於一些需要限制同乙個使用者併發訪問的場景,如果使用者併發請求多次,而伺服器處理沒有加鎖限制,使用者則可以多次請求成功。例如換領優惠券,如果使用者同一時間併發提交換領碼,在沒有加鎖限制的情況下,使用者則可以使用同乙個換領碼同時兌換到多張優惠券。偽 如下 if a 可以換領 b 執行換領 c 更新為已...