gpt4 book ai didi

php - 使用 Redis 缓存 Eloquent 模型实例

转载 作者:IT王子 更新时间:2023-10-29 06:04:27 29 4
gpt4 key购买 nike

所以在 Laravel 5.1 中,我有两个 Eloquent 模型:

\App\Model\Product
\App\Model\Brand

品牌和产品之间存在一对多关系(即一个品牌可能有许多产品)。在我们的系统中,每次我们想要检索产品的 Eloquent 模型时,我们都会急于加载品牌,如下所示:

$product = \App\Model\Product::whereId({integer})->with('brand')->first();

我们不希望产品经常变化,所以为了减少数据库查询和提高性能,我们想把这些Product模型缓存在Redis中,这样在我们执行数据库查询之前,我们会检查Product实例是否已经存储在缓存中。所以我的问题是,能够从 Redis 存储和检索这些产品实例的最佳方法是什么?

我知道我们可以通过以下方式将 Eloquent 模型转换为 JSON:

$json = $product->toJson();

这在技术上允许我将“字符串化”模型存储在 Redis 中。但是,我如何能够做相反的事情 - 将存储的 JSON 转换回 Product 实例(也有预先加载的 Brand 关系),我可以在代码中将其用作普通模型实例?

此外,为了减少 Redis 操作,这必须与 MGET 一起使用,允许我一次检索多个实例。管道化获取操作也是可以接受的。

这是否可行,或者是否有更好的方法来实现这一点?

提前谢谢你。

最佳答案

您应该在存储之前序列化您的实例,然后以这种方式反序列化它:

Redis::set('my_key', serialize($product));
...
$product = unserialize(Redis::get('my_key'));

如果您有访问器或急切加载关系数据,则无法通过 JSON 存储您的实例。

关于php - 使用 Redis 缓存 Eloquent 模型实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37126786/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com