php redis的有序集合實現延遲佇列

2021-10-25 14:26:56 字數 1211 閱讀 5892

延遲佇列就是個帶延遲功能的訊息佇列,相對於普通佇列,它可以在指定時間消費掉訊息。

延遲佇列的應用場景:

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 卻可以重複。集合是通過雜湊表實現的,所以新增,刪除,查詢的複雜度...