延時任務的場景不少,開發過程當中咱們常常會遇到,好比說:php
1.訂單未付款,5分鐘後自動取消,這是電商網站很是廣泛的需求;redis
2.用戶建立訂單不付款,3分鐘後自動發短信、微信消息提醒;json
3.會員到期提醒 等等,這些都算延時任務提醒。微信
實現延時任務功能的方式不少,咱們公司的業務不大,沒打算用中間件,因此,我乾脆直接用redis實現。yii2
redis實現延時任務有2種方式,一種是根據有序集合去實現,還有種是根據鍵的過時,去觸發延時任務,兩個方式均可以,今天我主要說的是第一種。由於我用的是yii2,因此代碼我用的yii2寫。併發
Redis 有序集合和集合同樣也是string類型元素的集合,且不容許重複的成員。不一樣的是每一個元素都會關聯一個double類型的分數。redis正是經過分數來爲集合中的成員進行從小到大的排序。有序集合的成員是惟一的,但分數(score)卻能夠重複。咱們這邊分數就是咱們的時間,咱們根據score的大小去處理業務。app
一:添加redis延時任務yii
二:獲取任務條數 咱們能夠作個定時任務,去定時獲取須要消費的延時任務,當有任務才繼續執行網站
三:消費延時任務 這邊是獲取延時任務代碼,具體怎麼去進一步抄做,能夠根據業務須要去寫。spa
四:刪除任務 任務處理完畢,刪除集合中已經處理好的任務