0

我打算在我的 PHP 代码中添加 APC 或 MEMCACHED !我的问题是是否需要重写所有代码?当我查看 PHP 手册时,我得到了这个!

function get_foo(foo_id)
 foo = memcached_get("foo:" . foo_id)
 return foo if defined foo

 foo = fetch_foo_from_database(foo_id)
 memcached_set("foo:" . foo_id, foo)
 return foo
end

所以,为了存储变量我需要做 memcached_set(...) 或者就像我添加插件并获得性能提升!

我对 APC / Memcache 不了解,因此欢迎对此进行任何讨论

4

2 回答 2

1

使用 APC,您首先获得一个操作码缓存——对于这部分,您无需在代码中修改任何内容:只需安装扩展并启用它。

操作码缓存通常会加快速度:它通过将操作码(PHP 文件的编译结果)保存在内存中来防止 PHP 脚本一次又一次地编译。


然后,APC 和 memcached 允许将数据存储在内存中;通常,这用于缓存长时间/昂贵操作(如复杂的 SQL 查询、Web 服务调用......)的结果。

关于这一点,没有什么神奇的:您将不得不编写一些代码,将数据存储到缓存中,然后从中获取数据——如果数据不在缓存中,或者缓存已过期,则执行耗时/昂贵的操作。


这里有几个问题/答案可能会给你一些额外的信息:

于 2011-04-16T14:18:54.483 回答
1

首先,您将仅因安装 APC 而获得性能提升。当一个脚本被执行时,它通过 Zend_Compile 运行,将你的 PHP 代码转换为 OPCODES,然后它通过 Zend_Execute 运行。每次页面加载时把PHP转成OPCODES的过程都是一样的,所以下次再做是浪费。APC (Alternative PHP Cache) 将这些操作码保存在内存中,因此下次它可以跳过该步骤并加快页面加载速度。

在脚本中缓存时,您需要进行一些更改。您可以随着时间的推移逐步进行这些更改,每次都获得更高的性能,因此您无需担心一次完成所有操作。如果你有一个服务器,我会使用 APC,如果你将来可能有多个服务器,我会使用 Memcache。

提高性能的低难度果实:

  • 查找大量加载的内容,例如您的主页。用一个额外的函数重写那个控制器,检查缓存中是否有数据,如果可用就使用它。如果没有,请以旧方式加载它,并将其存储在缓存中。请记住,您可以将数组和对象放在这两个数据存储中,因此应该很快就能完成。
  • 查看需要很长时间执行的数据库查询,并将它们缓存起来。
  • 寻找其他计算成本高的东西来缓存,这些在很大程度上取决于您的特定应用程序。
于 2011-04-16T14:19:45.043 回答