【问题标题】:Yii2 redis cache over file cacheYii2 redis 缓存超过文件缓存
【发布时间】:2016-04-22 07:04:02
【问题描述】:

我也在使用带有文件缓存和 redis 缓存的 yii2。在我的主配置文件中定义了 redis 缓存设置。

'redis' => [
        'class' => 'yii\redis\Connection',
        'hostname' => 'MY_IP',
        'port' => MY_PORT,
        'database' => 0,
    ],

我还在文件缓存设置下添加了一个组件。

'cache' => [
        'class' => 'yii\caching\FileCache',
    ],

所以对于缓存我使用$cache = Yii::$app->cache; 和设置缓存Yii::$app->cache->set($id, $value, $time); 并使用Yii::$app->cache->get($id); 所以这是从文件缓存中设置值还是覆盖文件缓存并使用redis它。

如果这是使用文件缓存,那么我们如何使用 redis 覆盖文件缓存。我们可以将 redis 缓存与 Yii::$app->cache->get($id); 一起使用,或者我们可以将 redis 与 use yii\redis\Cache; 一起使用并使用

$redis->hmset('test_collection', 'key1', 'val1', 'key2', 'val2');

【问题讨论】:

    标签: php caching redis yii2


    【解决方案1】:

    是的,您只需将$cache 属性设置为此:

    'cache' => [
        'class' => 'yii\redis\Cache',
        'redis' => 'redis' // id of the connection component as it is already defined
    ];
    

    在我的代码中,我是这样使用的:

     $cache = Yii::$app->cache;
    
     $cache->add($access_token, ['id' => Yii::$app->user->id], $expire);
    
     $user = $cache->get($access_token);
    

    我还注意到一些组件已经在使用它,例如 urlManager,它开始将生成的规则存储在 redis 数据库中。在 $cache 中使用时,请参阅 yii\redis\Cache 文档以获取可用属性和方法的完整列表。

    【讨论】:

    • 在您的缓存设置中,您的类被定义为redis,但您使用的是 $cache = Yii::$app->cache;而不是 $redis = Yii::$app->redis;所以这是存储在redis或文件缓存中。
    • 在 redis 中是的,因为我让 cache 组件使用 yii\redis\Cache 而不是 yii\caching\FileCache。现在两个组件 cacheredis 应该使用相同的 redis DB,你可以同时使用。唯一的区别是在Yii::$app->cache 中,您可以执行简单的操作,例如添加和获取(请参阅我链接的文档)。要使用更高级的 redis 相关方法,例如 hmset(),您需要在 $redis 组件中调用它们。
    • 好的。当我们使用文件缓存时,它会为运行时创建一个文件来存储缓存,根据你定义redis的属性类后它不会在运行时创建一个文件,它将从redis db中使用。
    • 是的。这就是它的工作原理。 cache 组件是 Yii 用来缓存东西的组件,并且总是可以在 Yii::$app->cache 中访问。在配置中,您设置该组件要使用的类,它可以是文件、redis 或其他任何东西。在这种情况下的运行时,我认为它会窃取添加文件但保存与 redis 相关的东西。
    猜你喜欢
    • 2020-08-20
    • 2015-10-01
    • 2018-02-14
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 2014-05-01
    • 1970-01-01
    • 2018-01-30
    相关资源
    最近更新 更多