使用redis作为mysql数据库的缓存

时间:2013-04-28 22:59:20

标签: php caching redis

我需要使用php创建一个解决方案,其中包含一个包含大量数据的mysql数据库。我的程序会有很多请求,我认为如果我使用缓存和OO数据库,我会得到一个好的结果,但我没有经验。

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

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

1 个答案:

答案 0 :(得分:47)

是的,redis对此有好处。但要获得要点,基本上有两种缓存方法。根据您是否使用框架(以及不使用框架),您可以使用标准或使用插件的第一个选项:

  1. 缓存数据库查询,即 - 选定的查询及其结果将保留为redis,以便在给定时间内更快地访问或直到清除缓存(更新数据库后有用)。在这种情况下,您可以使用内置的mysql查询缓存,它比使用其他键值存储更简单,或者您可以使用缓存覆盖与您自己的类的默认数据库集成(例如http://pythonhosted.org/johnny-cache/)。
  2. 自定义缓存,即创建自己的结构以保存在缓存中,并定期或手动使用从数据库中提取的数据重新填充它们。它更灵活,可能更强大,因为您可以使用内置的redis功能,例如列表或有序集,这使得更新开销更小。它需要更多的编码,但它通常提供更好的结果,因为它更加个性化。很好的例子是以redis的id列表形式保存热门文章,然后从redis访问具有给定id的序列化文章。你可以保持那篇文章不规范化 - 即。序列化对象可以包含用户ID和用户名,这样您就可以将其他查询的开销降至最低。
  3. 决定采用哪种方法是你的,我个人几乎总是采用第二种方法。但是,当然,一切都取决于你有多少时间,以及应用程序应该做什么 - 你也可以从mysql查询缓存开始,如果结果不够好,请转到redis和自定义缓存。