我要做一個自動退款功能?比如說他付款後三天內容沒有人回覆他,就自動進入退款流程!但是要如何寫這個定時任務呢?是每隔一秒鐘就去執行PHP腳本還是在mysql內寫定時任務?
有幾種方案,各有利弊,看看哪種更適合你吧:相關表需要設定好下單時間字段,過期時間字段。 第一種:crontab定時任務,執行一個php腳本去掃表,過期時間減去下單時間超過三天的都變更成退款狀態。
第二種:使用mysql的定時規劃任務,下面是個demo,具體邏輯根據你自己的去寫。
create event myevent on schedule at current_timestamp + interval 1 hour (周期或者时间点) do update myschema.mytable set mycol = mycol + 1; (执行的sql)
第三種:使用Redis保存,保存的時候expire過期時間3天即可。
第一種方案優點:簡單,程式碼邏輯改動不大,寫好就用缺點:時效性不太好,因為你跑crontab任務肯定是固定的某個時間第二種方案優點:直接mysql搞定,不用其他環節缺點:跟crontab優點類似,另如果你不熟悉mysql計劃任務,還需要去熟悉一下第三種方案優點:好用,訂單時效性好,而且不用走mysql少一次io缺點:可能邏輯層程式碼需要加上redis的邏輯,而且持久化策略、HA,主從要做好,不然宕機就悲劇了。
用linux crontab定時任務,隔一段時間執行一次某個固定的php腳本~
寫個定時任務,每隔一秒執行一次php腳本。
透過延時訊息佇列,下單之後進行訊息佇列的寫入任務註冊,三天之後進行觸發;再寫一介面,只是簡單判斷是否進行退款操作
退款不審核嗎?還直接跑腳本,傾家蕩產的節奏呀!
有幾種方案,各有利弊,看看哪種更適合你吧:
相關表需要設定好下單時間字段,過期時間字段。
第一種:crontab定時任務,執行一個php腳本去掃表,過期時間減去下單時間超過三天的都變更成退款狀態。
第二種:使用mysql的定時規劃任務,下面是個demo,具體邏輯根據你自己的去寫。
第三種:使用Redis保存,保存的時候expire過期時間3天即可。
第一種方案
優點:簡單,程式碼邏輯改動不大,寫好就用
缺點:時效性不太好,因為你跑crontab任務肯定是固定的某個時間
第二種方案
優點:直接mysql搞定,不用其他環節
缺點:跟crontab優點類似,另如果你不熟悉mysql計劃任務,還需要去熟悉一下
第三種方案
優點:好用,訂單時效性好,而且不用走mysql少一次io
缺點:可能邏輯層程式碼需要加上redis的邏輯,而且持久化策略、HA,主從要做好,不然宕機就悲劇了。
用linux crontab定時任務,隔一段時間執行一次某個固定的php腳本~
寫個定時任務,每隔一秒執行一次php腳本。
透過延時訊息佇列,下單之後進行訊息佇列的寫入任務註冊,三天之後進行觸發;再寫一介面,只是簡單判斷是否進行退款操作
退款不審核嗎?還直接跑腳本,傾家蕩產的節奏呀!