使用Redis作为MySQL数据库的缓存

29

我需要使用PHP创建一个解决方案,并且需要与MySQL数据库交互,该数据库中具有大量数据。我的程序将需要许多请求,如果我使用缓存和面向对象的数据库,我认为会取得良好的效果,但我没有经验。

例如,如果我将存储在MySQL中的信息缓存到Redis数据库中,性能将会得到改善,但我不确定这是否是个好主意,所以我希望有人可以帮助我选择。

抱歉,如果我的英语不太好,我来自巴西。


1
你是在问是否值得将数据库进行缓存吗? - galdikas
我自己使用Redis,但如果你已经在使用MySQL,你可能想看一下MySQL的HEAP表。 - NappingRabbit
1个回答

50

是的,redis很适合这个。但为了得到要点,基本上有两种缓存方法。根据您是否使用框架(以及使用哪个框架),您可能会在标准中或使用插件时拥有第一种选项:

  1. 缓存数据库查询,也就是选择的查询及其结果将在redis中保留,以便更快地访问一定时间或清除缓存的数据(在更新数据库后非常有用)。在这种情况下,您可以使用内置的mysql查询缓存,它比使用其他键值存储简单,或者您可以重写默认的数据库集成,使用自己的类来利用缓存(例如http://pythonhosted.org/johnny-cache/)。
  2. 自定义缓存,即创建自己的结构以保存在高速缓存中,并定期或手动重新填充这些结构以使用从数据库中获取的数据。它更加灵活和潜力更大,因为你可以使用内置的redis特性,如列表或排序集,使更新开销更小。需要更多的编码工作,但通常提供更好的结果,因为它更加定制化。一个很好的例子是将顶级文章保存在redis id列表中,然后使用给定id访问序列化文章。您可以保持未规范化的文章——即序列化对象可以包含用户ID以及用户名,以使额外查询的开销最小化。

由您决定采取哪种方法,我个人几乎总是选择第二种方法。但是,当然,一切都取决于您有多少时间以及应用程序的预期目标-您也可以从mysql查询缓存开始,如果结果不够好,则转移到redis和自定义缓存。


感谢Krzysztof Bujniewicz。 - Alexandre C. do Carmo
谢谢Krzysztof Bujniewicz。我将使用第二个选项,数据库mysql已经存在并且有很多数据,所以我会将其复制到redis中,当用户保存新数据时,程序将保存在mysql中,当用户调用结果或报告时,程序将使用redis。您对此有何看法?我将使用Yii框架。http://www.yiiframework.com/ - Alexandre C. do Carmo
1
尝试不要直接复制数据库,而是将其作为序列化对象放置在那里,经过从mysql获得的数据操作后,可以在应用程序中使用。一个好的例子是将热门文章保留为redis id列表形式,并通过给定的id从redis访问序列化文章。 - Krzysztof Bujniewicz
谢谢Krzysztof Bujniewicz。您的信息帮助我解决了问题。 - Alexandre C. do Carmo
3
感谢你介绍我认识Johnny Cache,我会为你点赞。 - Kerem
显示剩余3条评论

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