Laravel Cache:无效数据

mol*_*rat 4 caching laravel

我有两个看起来几乎相同的函数,并且作为来自JavaScript函数的AJAX请求一个接一个地调用.

/**
     * 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;
    }
Run Code Online (Sandbox Code Playgroud)

现在,当我第一次访问该页面时,我正确地获取了数据(因为它还没有被缓存).如果我第二次访问该页面,我会收到这些国家/地区,但是对于机场我会遇到错误并且看不清楚原因.

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

我发现,它必须通过谷歌缓存和删除缓存部分做一些事情.如果有人可以帮我解决那个问题,我会很高兴的.

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

最好的问候,马塞尔

Mar*_*ala 7

我相信序列化有一些可疑的东西.在序列化期间,$机场可能会被破坏.

如果机场字符串值对于MySQL字段来说太长,那么将无声地截断end并且数据解密失败.

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

  • 使用mediumText或longText而不是text作为字段值. (3认同)