PHP - APC缓存 - 用户特定数据与所有用户均可访问的数据

时间:2011-07-13 12:53:15

标签: php caching apc

我已经在几个网站上阅读了几个教程以及关于这个主题的StackOverFlow的几个问题,但我仍然无法找到我的问题的明确答案。

我想知道APC Cache如何管理/保存用户特定数据(将在php代码中使用的变量,这些变量是用户特定的。换句话说,其他用户不应该看到的数据。)和它如何保存所有用户都能看到的公开数据?

我只是想了解它是如何运作的。我知道APC“保存”或保留在内存中所需的和包含的文件......但是如果那些包含的文件在代码中具有用户特定的变量呢?如果让我们在/account/user_profile.php中说我使用几个变量,比如$ firstname $ lastname $ address等,那些变量会保存在内存中吗?例如,如果John X在更新或保存缓存时登录,那么APC将始终记住John为$ firstname,X为$ lastname?如果另一个用户访问同一页面,我希望他看到其用户个人资料详细信息,而不是John的。

我知道这可能已经讨论过,但我需要一个明确的答案。

谢谢!

3 个答案:

答案 0 :(得分:6)

您对APC缓存有误解。它是一个字节码缓存,这意味着它将存储PHP脚本的字节码。这将在下次再次从脚本中创建字节码时保存PHP解释器,因为它已经存在。

  

注意:自PHP 5.5以来,它附带了自己的OPCode缓存核心扩展,名为Opcache。用于操作码缓存的APC的使用被非正式弃用。有关详细信息和选项,请咨询您的系统管理员或Opdesk,无论扩展名称如何,此答案中概述的一般原则仍然适用。

在正常的PHP执行中,您的脚本代码将被采用并编译为字节代码。这个字节码然后由php处理器执行。这是JIT编译器的常见模式。

因此,如果没有字节码缓存,则需要在每个请求上编译字节码。使用字节码缓存,此步骤只需在所有请求中执行一次。下一次字节码已经在缓存中并且可以直接执行。

这与变量内容完全无关,只是代码。

答案 1 :(得分:1)

P.S:我从未使用过APC(在我真正理解APC的重要性之前改用了不同的语言),但我认为我理解这个概念。如果我在某处说谎,请纠正我。

> I am wondering how APC Cache manages/saves the user-specific data
> (variables that will be used in the php code, that are user-specific.
> In other words, data that should not be seen by other users.) and how
> does it save the publicly available data that all users can see?

您可以使用apc_store将数据存储在内存中,可以使用apc-fetch检索。它不会将所有变量存储在程序中。

bool apc_store ( string $key , mixed $var [, int $ttl = 0 ] )
  

注意:与PHP中的许多其他机制不同,变量存储使用   apc_store()将在请求之间保持不变(直到删除该值   来自缓存)。

<强>参数

  

使用此名称存储变量。密钥是缓存唯一的,因此存储   具有相同键的第二个值将覆盖原始值。

通过阅读文档,我假设您必须提供与memcached / redis中一样的唯一键。要私有存储数据,您只需获得session_id(每个会话唯一)并将其用作前缀。您可以使用key存储数据。 This Redis tutorial from Simon Willison还有一个描述如何使用密钥的部分,我将在下面引用:

  

Redis的核心是一个键值存储,所以从一开始就有意义   谈论钥匙。密钥不应包含空格 - 版本的   在1.2之前的Redis遇到了麻烦,即使现在也没有   保证任何边缘案例错误都得到了解决。普通的   约定是使用obj-type:id:field,尽管Redis支持   哈希作为价值观,这种惯例可能变得不那么重要了。

答案 2 :(得分:1)

我有同样的问题。但关键是这个。 APC认为用户不是最终用户,即John Smith,而是应用程序本身。因此,当APC说用户特定数据时,您可以存储“用户特定数据”,即有关该特定应用程序的APC中有关mywebsite.com的信息。它不适合人们。这意味着一个程序基本上将可变信息发送给另一个程序。