我已经在几个网站上阅读了几个教程以及关于这个主题的StackOverFlow的几个问题,但我仍然无法找到我的问题的明确答案。
我想知道APC Cache如何管理/保存用户特定数据(将在php代码中使用的变量,这些变量是用户特定的。换句话说,其他用户不应该看到的数据。)和它如何保存所有用户都能看到的公开数据?
我只是想了解它是如何运作的。我知道APC“保存”或保留在内存中所需的和包含的文件......但是如果那些包含的文件在代码中具有用户特定的变量呢?如果让我们在/account/user_profile.php中说我使用几个变量,比如$ firstname $ lastname $ address等,那些变量会保存在内存中吗?例如,如果John X在更新或保存缓存时登录,那么APC将始终记住John为$ firstname,X为$ lastname?如果另一个用户访问同一页面,我希望他看到其用户个人资料详细信息,而不是John的。
我知道这可能已经讨论过,但我需要一个明确的答案。
谢谢!
答案 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的信息。它不适合人们。这意味着一个程序基本上将可变信息发送给另一个程序。