Laravel Cache:无效数据

时间:2015-04-21 11:23:01

标签: 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;
    }

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

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

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

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

最好的问候,Marcel

1 个答案:

答案 0 :(得分:5)

我相信序列化有些可疑。在序列化过程中,$机场可能会被破坏。

如果机场字符串值对于MySQL字段来说太长,则会以静默方式截断结束,并且数据解密失败。

默认情况下,Laravel建议将值字段类型设置为文本。为了使它更大,你可以使用mediumText或longText字段。