0

我正在构建一个 webapp,我想限制用户过度使用该应用程序。

我想限制用户每月发送电子邮件通知的次数。

我正在考虑这样做的方式是使用 user_id 日期时间记录每个通知。所以在发送通知之前,我会选择 * WHERE user_id Between Date and Date+30。并验证条目数是否小于限制。

有没有一种简单快捷的方法来做到这一点。当我将有 1/2 百万的日志记录条目时,我有点紧张。

4

1 回答 1

0

这类问题非常适合 Redis 解决。

基本上,您可以为每个用户拥有一个缓存项,然后在每次用户发送电子邮件时增加它。缓存项目将在月底到期。您可以随时读取此缓存项。这样你就不需要任何数据库表或查询,而且速度应该是超快的。

如果您想在“前 30 天”期间精确限制用户,事情会变得有点复杂。在这种情况下,您通过将用户事件转储到 Redis 中的排序集中来记录用户事件,并以用户 ID 为键。然后,您可以使用排序集上的 ZCOUNT 函数来精确计算该用户在过去 30 天内发生了多少事件。当然,分数将是事件的时间戳。

顺便说一句,Redis 系统非常容易安装,在您的情况下可能不需要任何配置。

于 2013-09-16T00:00:15.663 回答