【问题标题】:Is cached data being stored for all users the same or different for individual user?为所有用户存储的缓存数据对于单个用户是相同的还是不同的?
【发布时间】:2017-08-13 09:44:45
【问题描述】:

使用 Yii 框架 2,我有一个动态网页内容,其数据根据用户的 IP 进行更改。我将我的缓存组件配置如下。

'cache' => [
     'class' => 'yii\caching\MemCache',
     'keyPrefix' => 'myDomainName',
     'defaultDuration' => 86400, // The cache will last for 86400 seconds = 1 day
 ],

我使用 ActiveRecord 实现缓存如下。

$dependency = new \yii\caching\DbDependency(['sql' => 'SELECT COUNT(*) FROM shop WHERE ip = ' . $ip]);

$result = Shop::getDb()->cache(function ($db) use($ip) {
    return Shop::find()->where(['ip' => $ip])->all();
}, 86400, $dependency);

事实上,每个用户都会根据他的 IP 看到不同的内容。这是我第一次尝试在网站上实现缓存。我的问题是,缓存会单独为每个用户存储,还是一个用户的缓存会覆盖另一个用户的缓存?请注意,从上面的代码中,DbDependency 也是基于用户的 IP 动态的。

【问题讨论】:

    标签: php caching yii2 memcached


    【解决方案1】:

    应用程序的每个部分的缓存数据都是相同的。如果您想“记住”用户的数据,您可以使用会话。在会话中,您可以存储每个用户的数据。当会话关闭时,数据将消失。

    看看:http://www.yiiframework.com/doc-2.0/guide-runtime-sessions-cookies.html

    【讨论】:

    • 这是一个很好的解决方案。但是我通过使用缓存找到了另一种解决方案,但对于单独的用户。缓存与密钥一起使用。因此,我通过 user_id 获取数据并将此 user_id 用作缓存键。通过这样做,我可以存储许多具有不同键的缓存,并且每个缓存都用于一个用户。我说的对吗?
    猜你喜欢
    • 1970-01-01
    • 2012-03-31
    • 2015-08-11
    • 2013-07-13
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    相关资源
    最近更新 更多