今晚坐到屁股痛都找不到一个离奇问题的成因:Laravel做的项目,Cache(缓存)怎么忽然失效了?
项目使用缓存来限制用户频繁操作,今晚发现部分用户快乐的“突破”了这个限制,玩的很high。经过检查,设置了1分钟的Cache无效了。回想这两天的变更,用composer update将laravel framework从5.5.46升级到了5.5.48,理论上不会有什么大的变动。
过程中翻查了一下5.5的文档:
https://laravel.com/docs/5.5/cache#storing-items-in-the-cache
无意中看了眼master主线的文档:
https://laravel.com/docs/master/cache#storing-items-in-the-cache
惊讶发现主线版本的cache中,有效期的参数单位改成了秒(second),而用5.5.x一直以来都是用的是分钟单位。


难道在5.5.x内小版本更新就改用秒了?这么变态没良心事情,我是不会相信作者会做的出来的。于是试着将项目代码的
Cache::set('key', 'value', 1);
改成
Cache::set('key', 'value', 60);
好吧,问题居然真的解决了。
要查真相,必须到github,而5.5的发行日志居然完全没有5.5.48的记载,页面上最新的是5.5.46

而5.5.48早在半年前的2019年8月20日就发布了,这里到底发生了什么事情?难道作者要不认5.5.48吗?😂

在v2ex翻到了v友的PR转帖 https://github.com/laravel/framework/pull/29610 ,5.5.48加入了对PSR-16(通用缓存库规范,见 https://www.php-fig.org/psr/psr-16/ )的支持,而PSR-16对缓存有效期输入参数规定了单位是秒。开发者已经让作者意识到这个变更的可能带来的后果可能很严重,但作者不但没有解决问题,甚至对于这个变更不记录,不说明…
这个坑只能自己改业务代码来填。
网友评论