【问题标题】:PHP Cache the user data, or only content that require database integration?PHP 缓存用户数据,还是只缓存需要数据库集成的内容?
【发布时间】:2015-12-19 23:26:25
【问题描述】:

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

如果用户在新闻页面并且缓存时间为 10 分钟,从缓存文件中读取完整内容(仅查看)?

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

你怎么看,我是否应该只缓存需要与数据库集成的信息,例如加载所有新闻然后将其缓存在文件中(排除用户数据),然后从 COOKIE/SESSION 动态加载(用户信息/缓存文件哈希 id - 然后加载它)?

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

谢谢,祝你有美好的一天! :)

【问题讨论】:

    标签: php authentication caching model-view-controller


    【解决方案1】:

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

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

    【讨论】:

    • 您好,cookies and sesions部分只说是存储用户数据的部分,例如(用户名、用户级别访问权限、用户详细信息)仅用于在缓存页面上获取此内容。由于速度慢,对于 100 个获得相同结果的查询,我放置了一个仅用于查询的小型缓存系统,我只是想知道是否有保存用户数据的意义。总之,SESSION 和 COOKIE 仅用于存储用户数据/或存储用户缓存文件 id(作为散列/验证)值。很抱歉在文字中犯了错误。
    • 如果登录用户的页面内容只有很小的差异,例如:“以 Foo Bar 登录”,那么您可以缓存页面输出,然后将名称应用到带有 JS 和 Cookie 的客户端。
    【解决方案2】:

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

    您是否对您的网站进行了概要分析?安装 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缓存方式。

    【讨论】:

    • 听起来不错,但在 APC 中,缓存序列化对象直接保存到文件中,然后在用户登录时加载?或者有另一种解决方案?目前我只为查询处理缓存,这主要是降低网页速度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    相关资源
    最近更新 更多