所以在Laravel 5.1中,我有两个雄辩的模型:
\App\Model\Product
\App\Model\Brand
品牌和产品之间存在一对多的关系(即一个品牌可能有很多产品)。在我们的系统中,每次我们想要检索产品的雄辩模型时,我们都渴望加载品牌,如下:
$product = \App\Model\Product::whereId({integer})->with('brand')->first();
我们不希望产品经常更改,因此为了减少数据库查询并提高性能,我们希望使用Redis缓存这些Product模型,以便在执行数据库查询之前,我们会检查Product实例是否存在已存储在缓存中。所以我的问题是,能够从Redis存储和检索这些产品实例的最佳方法是什么?
我知道我们可以通过执行以下操作将一个雄辩的模型转换为JSON:
$json = $product->toJson();
这在技术上允许我在Redis中存储“字符串化”模型。但是,我如何能够执行oposite - 将存储的JSON转换回Product实例(也包含急切加载的Brand关系),我可以在代码中将其用作普通模型实例?
此外,为了减少Redis操作,这必须与MGET一起使用,允许我一次检索多个实例。流水线获取操作也是可以接受的。
这是可行的,还是有更好的方法来实现这个目标?
提前谢谢。
答案 0 :(得分:3)
您应该在存储实例之前对其进行序列化,然后以这种方式对其进行反序列化:
Redis::set('my_key', serialize($product));
...
$product = unserialize(Redis::get('my_key'));
如果您有访问者或急切加载关系数据,则无法从JSON存储您的实例。