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


PHP - APC Cache - User specific data vs data accessible by all users

我在几个网站上读了一些教程,也在StackOverFlow上读了一些关于这个主题的问题,但我仍然找不到一个明确的答案。

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

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

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

谢谢!

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

注意:自从PHP版本5.5它自带的OPCode缓存核心扩展,命名为Opcache。在操作码缓存中使用APC已被正式弃用。有关详细信息和选项,请咨询您的Sysadmin或Opdesk,无论扩展名如何,本回答中概述的一般原则仍然适用。

在正常的PHP执行中,脚本代码将被获取并编译成字节码。这个字节码随后将由php处理器执行。这是JIT编译器的常见模式。

因此,如果没有字节码缓存,每个请求都需要编译字节码。对于字节码缓存,这个步骤只需要在所有请求中执行一次。下次字节码已经在缓存中,可以直接执行。

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

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()将在请求之间持续存在(直到该值被删除为止)

参数

<

键/em>

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

从阅读文档,我认为你必须提供唯一的键就像你会在memcached/redis。要存储私有数据,您只需获得session_id(每个会话唯一)并将其用作前缀。您使用key来存储数据。这个来自Simon Willison的Redis教程也有一节描述了如何使用键,我将在下面引用:

Redis本质上是一个键值存储,所以从它开始是有意义的谈论钥匙。的版本不应该包含空格1.2之前的Redis在这方面有问题,即使现在也没有保证任何边缘情况下的错误都已被消除。一个共同的约定是使用obj-type:id:字段,尽管现在Redis支持

我也有同样的问题。但关键是这样的。APC将用户视为应用程序本身,而不是最终用户(例如John Smith)。所以当APC说用户特定数据时,你可以存储"用户特定数据",即关于mywebsite.com在APC中关于特定应用程序的信息。这不是给人看的。它意味着一个程序向另一个程序发送变量信息。