PHP REDIS 實現訊息佇列服務

2021-10-01 08:38:56 字數 1324 閱讀 9450

$redis

=new

redis()

;$redis

->

connect

('127.0.0.1'

,6379);

// 生成任務

$tasks=[

];for($i=

0;$i<3;

$i++

)// 投遞任務給消費者

$res

=$redis

->

lpush

("tasks",.

..$tasks

);

$redis

=new

redis()

;$redis

->

connect

('127.0.0.1'

,6379);

// 思考問題: 空輪詢不但拉高了客戶端的 cpu,redis 的 qps 也會被拉高

// 空輪詢是什麼?

// 就是無論列表裡面是否存在資料那麼都一直不停執行 pop

while

(true

)else

}

// 消費者客戶端

$redis

=new

redis()

;$redis

->

connect

('127.0.0.1'

,6379);

// 生成任務

$tasks=[

];for($i=

0;$i<50;

$i++

)// redis zadd 命令用於將乙個或多個成員元素及其分數值加入到有序集當中

// 投遞任務

$res

=$redis

->

zadd

('delay-queue',[

],..

.$tasks);

if($res

)else

$redis

=new

redis()

;$redis

->

connect

('127.0.0.1'

,6379);

$key

='delay-queue'

;while

(true)"

.php_eol

;sleep(1

);// 模擬耗時業務

}else

}else

}

php redis實現訊息佇列

參考 參考 訊息佇列 是在訊息的傳輸過程中儲存訊息的容器。訊息佇列管理器在將訊息從它的源中繼到它的目標時充當中間人。佇列的主要目的是提供路由並保證訊息的傳遞 如果傳送訊息時接收者不可用,訊息佇列會保留訊息,直到可以成功地傳遞它 應用場景 非同步處理,應用解耦,流量削鋒和訊息通訊四個場景 1 非同步處...

php redis實現訊息佇列

個人理解在專案中使用訊息佇列一般是有如下幾個原因 把瞬間伺服器的請求處理換成非同步處理,緩解伺服器的壓力 實現資料順序排列獲取 redis實現訊息佇列步驟如下 1 redis函式rpush,lpop 2 建議定時任務入佇列 3 建立定時任務出佇列 檔案 demo.php插入資料到redis佇列 re...

PHP Redis 實現簡單訊息佇列

redis做訊息佇列的好處在於它的輕量級,高併發,延遲敏感,應用場景有 即時資料分析 秒殺計數器 快取等 redis做訊息佇列待解決的問題 1 訊息的可靠性 沒有相應的機制保證訊息的消費,當消費者消費失敗的時候,訊息體丟失,需要手動處理。生產者只管向佇列中插入資料,不管消費者是否成功消費。2 消費者...