我想为我的系统实施电子邮件黑名单。在该列表中,我想存储无法送达的电子邮件。
当我的系统无法发送电子邮件时,我想保存它,以后再也不会发送它们。
我可以看到两种可能最简单的解决方案:
当收件人不存在时,
- 我可以在用户表中设置标记
- 或在特定表中收集此类不良电子邮件
在我看来,第二个解决方案更简单(因为更容易被缓存),但是有一个关于选择方法的问题......
在 MyMail 功能中,我将首先调用在不良电子邮件列表(表)中搜索当前电子邮件,然后如果不存在则将其发送出去,否则取消发送。
所以主要问题是什么可以更快: 1. 每次向数据库查询以搜索特定的键,例如,SELECT 1 FROM table WHERE email='checking_email'
。当然,该表将只有一个字段email
,并且该字段将被索引(唯一)。我只会使用严格的比较。2.或将该表内容缓存在一个数组中并查询数组以检查特定元素|键是否存在?
如果错误的电子邮件列表可能很长,例如 1000 万条记录。
什么会更快?更适合高负载项目?
PS 我知道 PHP 数组会占用太多内存,但是在开始发送时事通讯时进行大量 DB 查询也不是很好。
PPS 我将把坏邮件缓存在一个变量中,这就是为什么在 PHP 中它会以数组的形式出现。
PPS 另一种方法是在每个缓存键中缓存每封坏电子邮件,并仅检查缓存中是否存在此类键,但在这种情况下,清除缓存会更加复杂。我认为这是最好的解决方案。缓存中的键可以是 bad_email_。该预发送调用的逻辑可能是:检查缓存中是否存在所需的电子邮件,如果不存在,则检查数据库,如果它不存在并且也存在,那么它就是好电子邮件。从另一个角度来看,如果系统检测到错误的电子邮件,那么它将同时保存在数据库和缓存中。