【问题标题】:How to get all cache entries with a tag on Laravel如何在 Laravel 上获取所有带有标签的缓存条目
【发布时间】:2016-04-12 00:00:29
【问题描述】:

我正在使用 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 解决方案,也可以。

【问题讨论】:

    标签: php laravel caching redis laravel-5.1


    【解决方案1】:

    你可以使用 redis 哈希:

    http://redis.io/commands/hset

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-26
      • 1970-01-01
      • 2015-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多