Laravel缓存:无效数据

Laravel Cache: invalid data

我有两个看起来非常相似的函数,它们被一个接一个地调用为 AJAX-来自 JavaScript 函数的请求。

/**
     * get all Airports for autocomplete
     */
    public function getAirports(){
        if(Cache::has('airports')){
            return Cache::get('airports');
        }

        $airportModel = new Airport;

        $airports = json_encode($airportModel -> _getForAutocomplete('iata_faa_code'));

        Cache::put('airports', $airports, 600);

        return $airports;
    }

    /**
     * get all Countries for autocomplete
     */
    public function getCountries(){
        if(Cache::has('countries')){
            return Cache::get('countries');
        }

        $countryModel = new Country;

        $countries = json_encode($countryModel -> _getForAutocomplete('two_letter_code'));

        Cache::put('countries', $countries, 600);

        return $countries;
    }

现在,当我第一次访问该页面时,我可以正确获取数据(因为它还没有被缓存)。如果我第二次访问该页面,我会看到国家/地区,但对于机场,我会收到以下错误并且不明白为什么。

{"error":{"type":"Illuminate\Encryption\DecryptException","message":"Invalid data.","file":"C:\xampp\htdocs\laravel\vendor\laravel\framework\src\Illuminate\Encryption\Encrypter.php","line":132}}

我发现,它必须通过谷歌搜索和删除缓存部分来处理缓存。如果有人能帮我解决这个问题,我会很高兴。

顺便说一句,我正在使用数据库作为我的缓存驱动程序。

此致,马塞尔

我认为连载有些可疑。 $airports 有可能在序列化过程中损坏。

如果机场字符串值对于 MySQL 字段来说太长,那么结尾将被静默截断并且数据解密失败。

默认情况下Laravel建议值字段类型为文本。要使其更大,您可以使用 mediumText 或 longText 字段。