如何在Laravel上获取带有标记的所有缓存条目

时间:2016-01-07 14:36:59

标签: php laravel caching redis laravel-5.1

我正在使用Laravel构建登录限制系统,我用它来保存缓存数据库上的每个失败登录。 (我使用Redis)。

代码:

class FailedLogins
{
    const   NUM_FAILURES_TO_LOCK = 30,
            TIME_RANGE = 10; // In minutes

    public function add($email, $ip = null)
    {
        if (is_null($ip))
            $ip = request()->ip();

        $index = md5($email . $ip);

        Cache::tags('failed.logins')->put($index, 1, self::TIME_RANGE);
    }

    public function hasTooMany()
    {
        $numFailedLogins = count(Cache::tags('failed.logins')->get());
        return ($numFailedLogins >= self::NUM_FAILURES_TO_LOCK);
    }
}

问题出在hasTooMany方法上,我必须在get方法上提供一个关键参数。我在这一行上尝试做的是:Cache::tags('failed.logins')->get()是获取带有failed.logins标记的所有条目,因此我可以计算有多少条目。

嗯,这不起作用,因为我做不到。那你建议我用什么来解决呢?如果它只是Redis的解决方案,也可以。

1 个答案:

答案 0 :(得分:0)

你可以使用redis哈希:

http://redis.io/commands/hset

但是您无法在哈希键上设置单独的过期日期,因此您必须手动删除它们,或者使用带有小时的主键,例如: failed.logins:08并且全部到期。