2013-04-28 136 views
25

我需要使用php创建一个包含大量数据的mysql数据库的解决方案。我的程序会有很多申请,我认为如果我使用缓存和面向对象的数据库,我会有一个好的结果,但我没有经验。使用redis作为mysql数据库的缓存

例如,如果我将保存在mysql中的信息缓存在redis数据库中,性能会提高,但我不知道这是否是一个好主意,所以我希望有人帮助我选择。

对不起,如果我的英语不太好,我来自巴西。

+1

你问是不是想要缓存数据库? – galdikas 2013-04-28 23:02:48

+1

yeah redis很好 – shapeshifter 2013-04-28 23:10:55

+0

我在前面使用redis自己,但是如果你已经使用'MySQL',你可能想要查看'MySQL's'' HEAP'表格 – NappingRabbit 2018-01-17 14:05:43

回答

44

是的,redis对此很有帮助。但要获得这个要点,基本上有两种缓存方法。根据您是否使用框架(和哪个),您可能有第一个选项可用于标准或使用插件:

  1. 缓存数据库查询,即 - 选定查询及其结果将保存在redis中以便在给定时间内更快访问或直到清除缓存(在更新数据库之后有用)。在这种情况下,您可以使用内置的mysql查询缓存,它将比使用其他键值存储更简单,或者您可以使用缓存(例如http://pythonhosted.org/johnny-cache/)覆盖与您自己的类的默认数据库集成。
  2. 自定义缓存,即创建您自己的结构以保存在缓存中,并定期或手动地使用从数据库获取的数据重新填充结构。它更灵活,可能更强大,因为您可以使用内置的redis功能,如列表或排序集,这会使更新开销变得更小。它需要更多的编码,但通常会提供更好的结果,因为它更加自定义。很好的例子是将顶级文章以redis ID列表的形式保存,然后通过redis访问具有给定ID的序列化文章。你可以保留那篇文章的非标准化 - 即。序列化对象可以包含用户标识以及用户名,这样可以将附加查询的开销降到最低。

这是你的决定采取哪种方法,我个人几乎总是用第二种方法。但是,当然,一切都取决于你有多少时间以及应用程序应该做什么 - 你最好还是从mysql查询缓存开始,如果结果不够好,则转到redis和定制缓存。

+0

谢谢Krzysztof Bujniewicz – 2013-04-29 13:20:01

+0

谢谢Krzysztof Bujniewicz。我将使用第二个数据库,数据库mysql已经存在并且有很多数据,所以我将一个副本移动到redis,并且当用户保存新数据时,程序将保存在mysql中,当用户调用结果或报告程序将使用Redis的。你怎么看待这件事?我将使用Yii框架。 http://www.yiiframework.com/ – 2013-04-29 13:26:57

+0

尽量不要复制数据库1:1,而是放置序列化对象,对从mysql获得的数据进行操作后,准备在应用程序中使用。很好的例子是将顶级文章以redis ID列表的形式保存,然后通过redis访问具有给定ID的序列化文章。 – 2013-04-29 14:08:46