Laravel 如何 "properly" 在 Redis 哈希中存储和检索模型
Laravel how to "properly" store & retrieve models in a Redis hash
我正在开发 Laravel 应用程序并开始使用 Redis 作为缓存系统。我正在考虑缓存我拥有的所有特定模型的数据,因为用户可能会经常提出 API 请求涉及该模型。一个有效的解决方案是将每个模型存储在一个散列中,其中字段是该记录的唯一 ID,而值只是唯一模型的数据,或者这个用例对于像 Redis 这样的简单键值数据库来说太复杂了吗?我也很好奇当我从哈希中检索所有数据时如何从哈希创建模型实例。感谢回复!
简短回答:是的,您可以在 Redis 的键值缓存中存储模型或集合,或基本上任何内容。只要提供的密钥是唯一的并且可以追溯。 Redis 甚至可以用作主数据库。
长答案
最终,我认为这取决于实施。在有人 can/should 考虑缓存 所有模型 之前,可以做很多优化。对于涉及大型数据集的“简单”记录,我建议首先优化您的查询和代码并检查结果。示例:
- Select只有您需要的数据,而不是整个模型。
- 使用 Database Query Builder for interacting with the database when targeting large records, rather than Eloquent(由于 Active Record 模式,Eloquent 显着变慢)。
- 考虑使用
toBase()
方法。这会检索所有数据但不会创建 Eloquent 模型,从而节省宝贵的资源。
- 使用 Laravel debugbar 等工具分析和发现潜在的长查询负载。
对于不经常更改或不再可能进行优化的大型数据集:缓存是必经之路!
这里没有正确答案,但也许这对您有所帮助!有很多 packages 实现了类似的行为。
我正在开发 Laravel 应用程序并开始使用 Redis 作为缓存系统。我正在考虑缓存我拥有的所有特定模型的数据,因为用户可能会经常提出 API 请求涉及该模型。一个有效的解决方案是将每个模型存储在一个散列中,其中字段是该记录的唯一 ID,而值只是唯一模型的数据,或者这个用例对于像 Redis 这样的简单键值数据库来说太复杂了吗?我也很好奇当我从哈希中检索所有数据时如何从哈希创建模型实例。感谢回复!
简短回答:是的,您可以在 Redis 的键值缓存中存储模型或集合,或基本上任何内容。只要提供的密钥是唯一的并且可以追溯。 Redis 甚至可以用作主数据库。
长答案
最终,我认为这取决于实施。在有人 can/should 考虑缓存 所有模型 之前,可以做很多优化。对于涉及大型数据集的“简单”记录,我建议首先优化您的查询和代码并检查结果。示例:
- Select只有您需要的数据,而不是整个模型。
- 使用 Database Query Builder for interacting with the database when targeting large records, rather than Eloquent(由于 Active Record 模式,Eloquent 显着变慢)。
- 考虑使用
toBase()
方法。这会检索所有数据但不会创建 Eloquent 模型,从而节省宝贵的资源。 - 使用 Laravel debugbar 等工具分析和发现潜在的长查询负载。
对于不经常更改或不再可能进行优化的大型数据集:缓存是必经之路!
这里没有正确答案,但也许这对您有所帮助!有很多 packages 实现了类似的行为。