Laravel Eloquent 透明缓存

各位同学,

安个家技术团队开源了一套 Eloquent 模型的 Redis 缓存项目Pea。我们已经在生产环境大量使用,欢迎大家测试评估,更欢迎提交issuepull request

特色

  • 行级缓存
  • 表级缓存
  • 自动过期

更多细节参考wiki

安装

composer require angejia/pea:dev-master

使用

config/app.php中添加Angejia\Pea\ServiceProvider,然后使用Angejia\Pea\Model替换Illuminate\Database\Eloquent\Model。 最后在模型中设置protected属性$needCachetrue即可开启缓存支持。

class UserModel extends \Angejia\Pea\Model
{
    protected $needCache = true;
}
本帖已被设为精华帖!
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 9

说明,我是在 L 5.3.2* 版本使用的,不知道 L5.1,L5.2 是不是会有同样的问题 。

@lvht 我使用了一下,看了一下源码,有一个问题
Angejia\Pea\QueryBuilder 继承 Illuminate\Database\Query\Builder ,覆盖了 `get() `方法

如果命中了缓存,返回的是数组对象 stdClass Object
如果没有命中,返回的是 Illuminate\Support\Collection Object

不同类型的返回结果,对后续的处理是有问题的。

Illuminate\Database\Eloquent\Builder:: getModels() 就有使用 get() 的结果

$results = $this->query->get($columns)->all();

所以在命中的时候,就会报错

Call to a member function all() on array

7年前 评论

@dryyun 这个还真是个问题。能在GitHub上提个issue吗?

7年前 评论

看着不错,很适用我目前的项目

6年前 评论

在5.4的版本上貌似问题还是比较多...作者貌似不维护了 :(

6年前 评论
wenber

@落伽 这个开发的时候貌似是只适用于5.1,我记得好像说只适配LTS版本

6年前 评论
wenber

@lvht 5.5会继续支持吗?

6年前 评论

有些修改不能立刻生效,还是读取的缓存

6年前 评论
wenber

一直在等支持lv5.5,结果才发现在安个家已经倒闭...
作者貌似也不在维护.所以发现了这个替代https://github.com/GeneaLabs/laravel-model-caching,该项目优于pea的是提供了artisan命令,用于当在框架外部操作了数据源时清除缓存.还有在查询时可以显示的禁止此条查询缓存记录.

6年前 评论
levi 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!