我想爲我的系統實現郵件黑名單。在該列表中,我想存儲不可交付的電子郵件。Array or not Array [PHP]
當我的系統無法發送電子郵件時,我想保存它,以後再也不會發送它們。
有兩種可能的最簡單的方法是什麼,我可以看到:
當收件人是不存在的,
- 我可以設置標誌有關,在用戶表
- 或收集特定這樣惡劣的電子郵件表
第二個解決方案對我來說似乎更容易(因爲更容易可以緩存),但是有一個關於選擇方法的問題...
在MyMail函數中,我將首先實現一個調用來在壞的郵件列表(表)中搜索當前的電子郵件,如果它不在那裏發送它,否則取消發送。
所以主要問題是什麼可以更快: 1.每次查詢數據庫來搜索特定的鍵,如SELECT 1 FROM table WHERE email='checking_email'
。當然,該表格只有一個字段email
,該字段將被索引(唯一)。我將只使用嚴格的比較。 2.或緩存一個數組中的表內容並且使查詢數組檢查是否存在或不存在特定的元素|鍵?
如果錯誤的電子郵件列表可能長得多,例如1000萬條記錄。
什麼會更快?更好的高負荷項目?
P.S.我知道PHP數組的內存太多了,但是在啓動時事通訊的情況下做了大量的數據庫查詢也不太好。
P.P.S.我將把不好的電子郵件緩存在一個變量中,這就是爲什麼在PHP中它將以數組的形式出現。
P.P.S.另一種方法是緩存每個緩存密鑰中的每個壞電子郵件,並僅檢查緩存中是否存在此密鑰,但在這種情況下,清除緩存將更加複雜。我認爲這是最好的解決方案。緩存中的鍵可以像bad_email_一樣。該預發送呼叫的邏輯可能是:檢查緩存中是否存在所需的電子郵件(如果不存在),然後檢查數據庫是否不存在,以及是否存在,那麼它就是好的電子郵件。從其他角度看,如果系統檢測到錯誤的電子郵件,那麼它將同時保存在數據庫和緩存中。
黑色電子郵件?像尼日利亞垃圾郵件? – GolezTrol
@GolezTrol對不起,沒有。意味着當然在黑名單中的電子郵件。 – user1016265
數組會比mysql比較快,但當您比較至少1000個以上的電子郵件列表時,您會注意到這種差異。 – Serg