Heim >Backend-Entwicklung >PHP-Tutorial >Nutzungshinweise zu Yii2-Redis – Cache

Nutzungshinweise zu Yii2-Redis – Cache

WBOY
WBOYOriginal
2016-08-08 09:19:521236Durchsuche

Ich habe Redis vor ein paar Tagen kurz kennengelernt und bin jetzt bereit, es in Projekten zu verwenden. Wir verwenden derzeit das Yii2-Framework. Nachdem wir auf der offiziellen Website nach Redis gesucht hatten, fanden wir die Erweiterung yii2-redis.

Nach der Installation ist es super einfach zu verwenden. Öffnen Sie die Datei common/config/main.php und ändern Sie sie wie folgt.

'cache' => [
    // 'class' => 'yii\caching\FileCache',
    'class' => 'yii\redis\Cache',
],
'redis' => [
    'class' => 'yii\redis\Connection',
    'hostname' => 'localhost',
    'port' => 6379,
    'database' => 0,
],

OK, jetzt wurde Redis verwendet, um den Cache von Yii zu übernehmen. Die Verwendung des Caches ist die gleiche wie zuvor , aber es gibt eine Sache, die nicht zählt, Bugs Bug, also ist es eine kleine Falle, ich werde später darüber sprechen.

Testen wir zuerst den Cache

Yii::$app->cache->set('test', 'hehe..');
echo Yii::$app->cache->get('test'), "\n";

Yii::$app->cache->set('test1', 'haha..', 5);
echo '1 ', Yii::$app->cache->get('test1'), "\n";
sleep(6);
echo '2 ', Yii::$app->cache->get('test1'), "\n";

Werfen wir einen Blick auf die Testergebnisse.

Gleiche Verwendung wie zuvor, kein Problem. .

Aber wie ich gerade sagte, es gibt einen Fehler, der kein Fehler ist, also ist es ein kleines Loch. Was ist das?
Wenn Sie Redis direkt verwenden, um den Cache zu übernehmen, ist dies bei normaler Verwendung kein Problem. Wenn der Ablaufzeitwert jedoch den int-Bereich überschreitet, meldet Redis einen Fehler.
Ich habe yii2-admin verwendet und bin in eine Falle getappt, weil es 30 Tage lang zwischengespeichert wurde, was 2592000 Sekunden entspricht, und die Genauigkeit der Redis-Cache-Zeit standardmäßig Millisekunden verwendet, sodass die Zeit 2592000000 Millisekunden beträgt.
Die Ablaufzeit von Redis kann nur vom Typ int sein. PHP in Cache.php muss es ohne weitere Verarbeitung in int konvertieren, sodass es zu -1702967296 wird und dann ein Fehler gemeldet wird.

Aber es wird keine negative Zahl direkt unter der Redis-Befehlszeile geben, wie in der Abbildung gezeigt.

Aber das spielt keine Rolle, es ist sehr einfach zu beheben, wir können es einfach auf Sekunden umstellen.
Öffnen Sie vendor/yiisoft/yii2-redis/Cache.php Zeile 133 und ändern Sie sie in den folgenden Code.

protected function setValue($key, $value, $expire)
{
    if ($expire == 0) {
        return (bool) $this->redis->executeCommand('SET', [$key, $value]);
    } else {
        // $expire = (int) ($expire * 1000); // 单位默认为毫秒
        // return (bool) $this->redis->executeCommand('SET', [$key, $value, 'PX', $expire]);

        $expire = +$expire > 0 ? $expire : 0; // 防止负数
        return (bool) $this->redis->executeCommand('SET', [$key, $value, 'EX', $expire]); // 按秒缓存
    }
}


Das ist in Ordnung.

Okay, lasst uns diese heute teilen, und ich werde morgen und übermorgen über die Verbindung, ActiveRecord und die Fallstricke von yii2-redis sprechen.

Das Obige stellt die Hinweise zur Verwendung von Yii2-Redis - Cache vor, einschließlich der relevanten Aspekte. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn