2013-08-04 52 views
0

我在应用程序开发中有点新鲜。我现在正在开发一个应用程序,我想知道你作为一个新手所面临的问题的有价值的意见。高效的PHP缓存策略?

说到缓存,我应该在缓存中添加哪些应用程序部分?让我给你举个例子,我在做什么:

我正在为我的用户开发一个图片共享应用程序,并且我创建了一个缓存机制来缓存每个用户的数据,他的相册&他的照片。我现在有每页(仅在情况下,它是不是已经存储在缓存),例如1个查询:

if (!$ItemNotInCache) 
{ 
$MyData = $DB->Query('blah'); 
Cache::CacheIt($MyData); 
} 

这是关于每个结果我得到,我想不是每次调用过多查询用户请求页面,这是否有效?问题是,你能明白我必须建立这个庞大的机构来操作数组所有这些数据,等等。

  • 当用户删除从DB的形象,我不得不删除从索引他的专辑的缓存数据也是如此。

  • 当用户将图像添加到数据库时,我使用array_merge将此项插入到他的缓存数据中,依此类推。

我的一个朋友告诉我,因为我的数据是动态的,我不应该滥用缓存,它会经常改变,他还告诉我这是为什么MySQL是对。我的问题是我应该用这种方式使用缓存还是不使用?正如你所理解的那样,数据是动态的,它应该经常刷新。这是有效的,或者我应该坚持MySQL查询?

+2

MySQL实现了自己的重要缓存 - 如果您缓存查询的结果,那么您会将缓存翻倍。你的朋友可能是对的。 “可能”是因为每个系统都不同,而且这里没有足够的信息。要确定,你需要分析你的应用程序,并在那些对性能影响最大的领域工作 – 2013-08-04 21:02:11

+0

@MikeW True,但是数据库调用/数据传输仍然存在开销,这可能在高流量站点上被证明是非常重要的。这也假定MySQL有足够的内存,等等。 –

+0

@middaparka对于低流量的网站,努力可能会超过收益。我们无法从他在这里发布的信息中分辨出来。正如我所说 - OP需要描述他的应用程序。 – 2013-08-04 21:17:38

回答

0

我认为你在做什么是非常好的。几乎在所有情况下,从缓存检索使用较少的资源,而不是每次都进行查询。

但是,我不会尝试“合并”添加的图像,只需再次调用数据库。只需在修改相册时增加缓存。我不认为在专辑修改时编辑缓存是正确的方法。数据库擅长存储和构建数据,因此很容易被检索。为什么要建造自己?

+0

我真的在你的答案和迈克之间,我试图找到该怎么做。我相信你也一样,但是当我的朋友看到​​我在做什么时,他发现我花了很多时间来创建DataManager以及其中的很多细节,并且像Mike说的,他完全告诉我“你有2个MySQL现在,为什么?你甚至可以通过数组对你的数据进行分页,这太疯狂了!“ – JD30113