PHP缓存用户数据,还是只缓存需要数据库集成的内容?

PHP缓存用户数据,还是只缓存需要数据库集成的内容?,php,authentication,caching,model-view-controller,Php,Authentication,Caching,Model View Controller,我正在编写小型PHP框架,现在我面临着“思维”问题。问题是如何处理用户数据(记录的名称、记录的状态)等。 目前,在阅读许多教程时,我只看到了简单的方法,比如缓存查询、完整的HTML输出等。 那么,您认为我应该只缓存视图吗? 例如,加载包含用户“不敏感”数据的页眉和页脚,然后检查特定页面的cookie是否存在 比如,如果用户在新闻页面上,缓存时间是10分钟,那么从缓存文件中读取完整内容(仅查看) 但是如何处理缓存文件中的会话,这是一个简单的HTML输出,我需要防止用户由于某种原因看到不同用户的缓存

我正在编写小型PHP框架,现在我面临着“思维”问题。问题是如何处理用户数据(记录的名称、记录的状态)等。 目前,在阅读许多教程时,我只看到了简单的方法,比如缓存查询、完整的HTML输出等。 那么,您认为我应该只缓存视图吗? 例如,加载包含用户“不敏感”数据的页眉和页脚,然后检查特定页面的cookie是否存在

比如,如果用户在新闻页面上,缓存时间是10分钟,那么从缓存文件中读取完整内容(仅查看)

但是如何处理缓存文件中的会话,这是一个简单的HTML输出,我需要防止用户由于某种原因看到不同用户的缓存文件(比如m5/sha1哈希被分配了两次),或者每个用户保存缓存文件

总的来说,我是否应该只缓存需要与数据库集成的信息,例如加载所有新闻,然后将其缓存在文件中(用户数据被排除),然后从COOKIE/会话中动态加载(用户信息/缓存文件哈希id-然后加载)

或者有任何简单的解决方案/或不简单的处理方法? 我并不是说要使用任何PHP模块,这个问题是为了得到答案(最好是用用户数据获得缓存系统的模式),然后我会为自己开发它(也是为了获得经验)


谢谢,我祝你一天好!:)

唐纳德·克努特(Donald Knuth)说,过早优化是万恶之源,这当然适用于这里。您不知道如何设计缓存,因为您不知道什么是慢的(实际上,这里没有什么建议您知道它是否慢)


cookie太小,不能有效地作为缓存机制,会话是存储缓存数据的错误位置(尽管在某些情况下,使用会话id作为缓存密钥可能是一种明智的方法)。

过早优化是万恶之源,Donald Knuth说,这当然适用于这里。您不知道如何设计缓存,因为您不知道什么是慢的(实际上,这里没有什么建议您知道它是否慢)


cookie太小,不能有效地作为缓存机制,并且会话是存储缓存数据的错误位置(尽管在某些情况下,使用会话id作为缓存键可能是一种明智的方法)。

缓存“新闻”页听起来不错,缓存什么取决于什么会使应用程序变慢

你已经分析过你的网站了吗?安装xdebug,看看什么是慢的。 如果查询速度慢,您可以缓存查询输出,但大多数情况下是函数对数据“做些什么”

对于您关于缓存用户数据的问题,为什么不创建如下包装器函数:

function getUserByID($pID) {
    $user = apc_fetch("user_".$pID);
    if(empty($user)) {
        $user = CreateUserObject();
        apc_store(serialize($user));
        return $user;
    } else {
        return unserialize($user);
    }
}

以上只是使用apcu的一个示例,您可以使用所需的w/e缓存方法。

缓存“新闻”页面听起来不错,缓存什么取决于什么使您的应用程序变慢

你已经分析过你的网站了吗?安装xdebug,看看什么是慢的。 如果查询速度慢,您可以缓存查询输出,但大多数情况下是函数对数据“做些什么”

对于您关于缓存用户数据的问题,为什么不创建如下包装器函数:

function getUserByID($pID) {
    $user = apc_fetch("user_".$pID);
    if(empty($user)) {
        $user = CreateUserObject();
        apc_store(serialize($user));
        return $user;
    } else {
        return unserialize($user);
    }
}

以上只是使用apcu的一个示例,您可以使用所需的w/e缓存方法。

Hi,Cookie和sesions的部分仅用于存储用户数据,例如(用户名、用户级别访问、用户详细信息),仅用于在缓存页面上获取此内容。由于速度慢,对于100个得到相同结果的问题,我使用了一个只适用于查询的小型缓存系统,我只是想知道保存用户数据是否有意义。总之,会话和COOKIE仅用于存储用户数据/或存储用户缓存文件id(作为哈希/验证的)值。很抱歉在文本中出错。如果登录用户的页面内容只有最小的差异,例如:“以Foo Bar身份登录”,那么您可以缓存页面输出,然后使用JS和Cookie在客户端应用名称。您好,Cookie和session的部分只对存储用户数据的部分说,例如(用户名、用户级别访问、用户详细信息),仅在缓存页面上获取此内容。由于速度慢,对于100个得到相同结果的问题,我使用了一个只适用于查询的小型缓存系统,我只是想知道保存用户数据是否有意义。总之,会话和COOKIE仅用于存储用户数据/或存储用户缓存文件id(作为哈希/验证的)值。很抱歉在文本中出错。如果登录用户的页面内容只有最小的差异,例如:“以Foo Bar身份登录”,那么您可以缓存页面输出,然后使用JS和Cookie在客户端应用名称。听起来不错,但在APC中,缓存序列对象直接保存到文件中,然后在用户登录时加载?还是有其他解决办法?现在我只处理查询的缓存,这主要会减慢网页的速度。听起来不错,但在APC中,缓存序列对象直接保存到文件中,然后在用户登录时加载?还是有其他解决办法?目前我只处理查询的缓存,这主要会减慢网页的速度。