需求是,在使用者進行了一個操作之後,倒數兩個小時,然後到時間點執行另一個操作
但是現在沒有辦法來進行這兩個小時的計時。
請問有沒有什麼好的思路
ringa_lee
我的思路是,透過佇列延遲分發一個任務,就是2小時後觸發,然後在任務中發送一個簡訊即可。 以下是文檔連結:
隊列延遲分發
簡訊通知
建一張表,存用戶手機號,簡訊內容,應發送的時間。 用戶點選一次就新增一行記錄。 設定一個定時任務,每分鐘檢查一次,到了時間就發送,發完就刪除這條記錄
把要執行的任務名稱及執行時刻塞進redis有序集合中,然後定時檢查redis有序集合的分值,如果在範圍內就取出執行任務
用戶操作的時候一定會存一個操作時間到表裡,守護程序一直去查詢到兩個小時的時候發短信
這就是定時器和訊息佇列的需求。 。 。
linux 使用crontab 而window這種介面系統有其自訂任務,使用定時任務curl指定php文件,又或使用php執行php檔案。這樣的話透過每分鐘執行定時存取(類似輪詢),在存取php檔案時候讀取儲存資料表的資料(條件兩個小時資料),你需要將資料丟進佇列內(避免資料量過大時候,大量發送訊息導致伺服器資源使用過大),最後將佇列抽取定量資料,進行傳送資料
用crontab,跑資料庫的任務佇列
你可以利用一個php的非同步框架,如workerman或swoole 建立一個計時器,就可以在你需要的時候執行任務! ! !
把要觸發的時間和事件保存下來,腳本每分鐘去跑數據,到點了就執行,最簡單了
我的思路是,透過佇列延遲分發一個任務,就是2小時後觸發,然後在任務中發送一個簡訊即可。
以下是文檔連結:
隊列延遲分發
簡訊通知
建一張表,存用戶手機號,簡訊內容,應發送的時間。
用戶點選一次就新增一行記錄。
設定一個定時任務,每分鐘檢查一次,到了時間就發送,發完就刪除這條記錄
把要執行的任務名稱及執行時刻塞進redis有序集合中,然後定時檢查redis有序集合的分值,如果在範圍內就取出執行任務
用戶操作的時候一定會存一個操作時間到表裡,守護程序一直去查詢到兩個小時的時候發短信
這就是定時器和訊息佇列的需求。 。 。
linux 使用crontab 而window這種介面系統有其自訂任務,使用定時任務curl指定php文件,又或使用php執行php檔案。這樣的話透過每分鐘執行定時存取(類似輪詢),在存取php檔案時候讀取儲存資料表的資料(條件兩個小時資料),你需要將資料丟進佇列內(避免資料量過大時候,大量發送訊息導致伺服器資源使用過大),最後將佇列抽取定量資料,進行傳送資料
用crontab,跑資料庫的任務佇列
你可以利用一個php的非同步框架,如workerman或swoole 建立一個計時器,就可以在你需要的時候執行任務! ! !
把要觸發的時間和事件保存下來,腳本每分鐘去跑數據,到點了就執行,最簡單了