延遲佇列就是個帶延遲功能的訊息佇列,相對於普通佇列,它可以在指定時間消費掉訊息。
延遲佇列的應用場景:
1、新使用者註冊,10分鐘後傳送郵件或站內信。
2、使用者下單後,30分鐘未支付,訂單自動作廢。
我們通過redis的有序集合zset來實現簡單的延遲佇列,將訊息資料序列化,作為zset的value,把訊息處理時間作為score,每次通過zrangebyscore獲取一條訊息進行處理。
<?php
class delayqueue
public function deltask($value)
public function gettask()
public function addtask($name, $time, $data)
public function run()
$task = $task[0];
//有併發的可能,這裡通過zrem返回值判斷誰搶到該任務
if ($this->deltask($task))
return false;
}} $dq = new delayqueue('close_order', [
'host' => '127.0.0.1',
'port' => 6379,
'auth' => '',
'timeout' => 60,
]);
$dq->addtask('close_order_111', time() + 30, ['order_id' => '111']);
$dq->addtask('close_order_222', time() + 60, ['order_id' => '222']);
$dq->addtask('close_order_333', time() + 90, ['order_id' => '333']);
// 然後,我們寫乙個php指令碼,用來處理佇列中的任務。
<?php
set_time_limit(0);
$dq = new delayqueue('close_order', [
'host' => '127.0.0.1',
'port' => 6379,
'auth' => '',
'timeout' => 60,
]);
while (true)
List,Map,Set實現有序集合
預設有序 list list newarraylist list.add 0 list.add 4 list.add 2 list.add 8 system.out.println list.tostring 輸出結果為 0,4,2,8 collections.sort list collectio...
有序集合 REDIS ZSET
命令 command key score value zadd myzset 1 one key是作為db最上層字典索引的key 儲存到底層的是score和value 1.如果第乙個元素符合以下條件的話,就建立乙個 redis encoding ziplist 編碼的有序集 redis zset底層...
Redis 有序集合
redis 有序集合和集合一樣也是string型別元素的集合,且不允許重複的成員。不同的是每個元素都會關聯乙個double型別的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。有序集合的成員是唯一的,但分數 score 卻可以重複。集合是通過雜湊表實現的,所以新增,刪除,查詢的複雜度...