首页 > 解决方案 > Laravel Cache - 尝试从关闭的 MaxMind 数据库中读取

问题描述

我将 Laravel 5.8 和 MaxMind GeoLite2-City.mmdb 与 Reader (GeoIp2\Database\Reader) 一起使用。

这是它的样子:

public function checkWithoutCache(Request $request) {
    
    $reader = new Reader(storage_path().'/app/ipToCountry/GeoLite2-City-v2.mmdb');      
    $r      = $reader->city($request->ip());
    $reader->close();
    return $r;
}

一切正常。现在,因为我们的服务器处理大量请求,对于每个请求,我们都在使用 GeoLite2-City-v2.mmdb 文件(70MB)加载 Reader,我们想知道这样保留它还是将 Reader 对象添加到 laravel Cache 是否明智为了加载它一次然后使用缓存所以我们将提高性能。

所以我们尝试像下一个示例一样使用 Laravel 缓存:

public function checkWithCache(Request $request) {
    
    $reader = \Cache::remember('geo_city_instance', now()->addDays(30), function(){
        return new Reader(storage_path().'/app/ipToCountry/GeoLite2-City-v2.mmdb'); 
    });
    $r      = $reader->city($request->ip());
    $reader->close();
    return $r;
}

但是我们得到了下一个异常:

BadMethodCallException 尝试从已关闭的 MaxMind DB 中读取数据 (…/vendor/maxmind-db/reader/src/MaxMind/Db/Reader.php158)

有没有人有关于如何毫无例外地将其添加到缓存的解决方案?

或者我们实际上不需要将其添加到缓存中?

请帮忙,谢谢!

标签: phplaravellaravel-5maxmind

解决方案


推荐阅读