php - 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)
有没有人有关于如何毫无例外地将其添加到缓存的解决方案?
或者我们实际上不需要将其添加到缓存中?
请帮忙,谢谢!
解决方案
推荐阅读
- windows - 错误 2013 (HY000):在“握手:读取初始通信数据包”时失去与 MySQL 服务器的连接,系统错误:11
- javascript - 无法进入下一个中间件——NodeJS
- python - 使用 FFMPY 设置转换为视频的图像的持续时间
- python - 尝试通过 Django Rest Framework 中的 APIVIew 发布详细信息时,未填充 OnetoOneRelatedField 模型详细信息
- sbt - sbt 中的向后设置(allowInsecureProtocol)
- jquery - 循环通过 ajax 获取请求和(存储在变量中)控制台在最后一个 ajax 请求完成结束时的所有响应。(使用活动 IO)
- html - 表格行上的单独单选按钮
- vba - CopyFolder 还是 Robocopy?
- php - php中哪个文件继承代码(父-子)
- r - 替代嵌套 ifelse 语句 // 将季节分配给月份