Redis用于cakePHP应用程序

3
我希望开始一个大型的CakePHP项目,其中性能将是一个问题。我将拥有一个用户表,用作树形行为和许多与用户相关的财务数据。这个应用程序将生成很多动态报告,聚合不同树节点的数据等。
由于在github上有一个易于使用的库,可以将模型的数据源设置为redis,所以我想知道是否将其用于整个应用程序是一个好主意?有没有任何有经验的人,如果我决定依赖redis作为主要/唯一的数据存储,可能会遇到什么问题?
编辑:我已安装redis并尝试使用RedisModel来管理两个具有简单关系HasMany/BelongsTo的模型。当我试图像标准AppModels一样简单地使用这些模型时 - 它根本不起作用(Redis错误:缺少密钥)。显然,您不能以标准方式使用Model->find Model->save等。相反,您必须使用redis方法(如setKeyValue等)。这意味着分页和其他CakePHP特性也将不起作用。因此,也许不是将redisModel用于所有模型的最佳选择...
1个回答

5

我不能具体代表CakePHP,但我会谈论关于redis的一般情况以及你问题中的要点,最终应该适用于你选择的框架。让我们来看看:

  • 您提到您想要启动一个需要高性能的应用程序,我只是想提醒您应该小心假设您将需要nosql解决方案,因为这很难事先评估。Redis非常快,但例如MySQL已被证明可以很好地处理数百万条记录和操作,前提是它被正确配置和使用,并且如果您需要大量关系结构,则更简单。

  • 关于Redis作为主要且唯一的数据存储:

    • Redis对于这项工作非常稳定。 Instagram据报道通过使用散列伪分片成功存储了3亿个键值对,虽然它不是他们使用的唯一数据存储系统,但这表明redis非常可靠。这个网站(Stack Overflow)也广泛地使用redis来进行缓存。

    • Redis的整体连续正常运行时间平均而言也非常出色(考虑到上面的观点,这并不奇怪)

    • 存在选项以缓解停机问题,支持复制到某种程度,并且Redis Cluster即将推出以支持适当的分布式方法。

    • 您可能会遇到的主要问题是不正确地理解其持久性如何工作。在开始之前,您绝对应该阅读文章,因为这一点非常重要。简而言之,redis不会立即将更改写入磁盘,这意味着根据您的配置,崩溃可能导致数据损失,从最后一次磁盘写入几秒钟到几分钟不等。这可能或可能不是一个问题,具体取决于您的用例;如果数据非常敏感(即财务记录),则在转向redis之前您可能需要三思而后行,或者构建一个系统,其中不仅使用redis而且还与另一个存储系统相结合。

  • 在非关系型数据存储中使用关系结构(如redis)意味着需要做更多的工作并经常复制/去规范化数据。虽然可以这样做,但这是需要考虑的事情;在您的问题中,您提到您将需要聚合数据以生成动态报告,您确定要使用redis吗?听起来像关系数据库会为您提供更大的灵活性,而代价只是一点性能。如果您事先知道需要对数据运行复杂的查询,则除非绝对必要,否则重新发明轮子可能不是一个好主意。

我的建议是先了解 Redis 是什么以及其工作原理,可以尝试构建自己的模型来更好地理解可以做什么和不能做什么,然后再评估自己想要使用它的方向。Redis 可靠到足以用作独立的存储系统,但最明智的做法是使用正确的工具来完成正确的工作,您可能会发现应用程序的某些功能与 Redis 配合良好,而另一些则更适合于传统的存储系统。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接