【问题标题】:Is counting Redis keys not recommended in production even has expiration time?在生产中不推荐计算 Redis 密钥是否有过期时间?
【发布时间】:2021-10-14 11:59:56
【问题描述】:

我在这里看到了How to count the number of keys matching a pattern? 的帖子,其中 cmets 说不建议在生产中计算密钥。我相信这是真的。

我的问题是..密钥过期时仍然不推荐吗?过期会删除密钥。

我想要做的是我通过将活跃用户存储在过期的 redis 密钥中来计算活跃用户的数量。我用 Laravel 做的。我需要计算匹配的密钥才能获得活跃用户的数量。

有什么推荐吗?谢谢各位!

【问题讨论】:

    标签: php laravel redis


    【解决方案1】:

    依靠您在前端设置的last_login 字段或last_active 字段不是更实用的解决方案吗?使用 Laravel 应用程序或每 15 分钟或类似的用户活动。您将在应用程序中的每次调用中设置的中间件。

    class LastActivityMiddleware
    {
        public function handle(Request $request, Closure $next, ...$guards)
        {
            $user = Auth::user();
            
            $user->last_activity = now();
            $user->save();
    
            return $next($request);
        }
    }
    

    这将使它成为可能。

    User::where('last_active', '>=', now()->subMinutes(15))->count();
    

    另一种解决方案的运行时间很糟糕,显然会破坏缓存,并且只是解决简单问题的一个非常复杂的解决方案。

    【讨论】:

    • 这是我最初的解决方案,并认为使用redis会更好,我正在尝试更多地探索redis来学习它的应用程序,比如laravel。但我想中间件仍然是最好的方法,虽然哈哈哈。谢谢大佬!
    • 我认为这是最好的,redis 命令也必须遍历所有用户密钥,如果你有数百万需要一段时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 2015-09-01
    • 2011-02-22
    • 2012-08-04
    • 2017-09-18
    相关资源
    最近更新 更多