ホームページ >バックエンド開発 >PHPチュートリアル >Yii2-Redis 使用上の注意 - キャッシュ

Yii2-Redis 使用上の注意 - キャッシュ

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-08-08 09:19:521272ブラウズ

私は数日前に Redis について簡単に学びました。今ではプロジェクトで使用する準備ができています。現在 Yii2 フレームワークを使用しています。公式 Web サイトで Redis を検索したところ、yii2-redis 拡張機能が見つかりました。

インストール後の使用は非常に簡単です。common/config/main.phpファイルを開いて次のように変更します。

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

さて、redis を使用して yii のキャッシュを引き継ぎました。キャッシュの使用方法は以前と同じですが、そうでないバグがあります。小さな落とし穴なので、後で説明します。

キャッシュをテストしてみましょう。まず、

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";

のテスト結果を見てみましょう。

以前と同じ使い方で問題ありません。 。

でも、さっきも言いましたが、バグじゃないバグがあるので、それは何ですか?
redisを直接使用してキャッシュを引き継ぐ場合、普通に使用する分には問題ありませんが、有効期限の値がintの範囲を超えるとredisがエラーを報告します。
私は yii2-admin を使用しましたが、たまたま罠にはまったのです。30 日間 (つまり 2592000 秒) キャッシュされていたためです。Redis のキャッシュ時間の精度はデフォルトでミリ秒を使用するため、時間は 2592000000 ミリ秒になります。
redisの有効期限はint型のみですが、Cache.php内のPHPでは何も処理せずに強制的にint型に変換されるため、-1702967296となりエラーが報告されます。

ただし、図に示すように、redis コマンドライン直下では負になりません。

でも、それは問題ではありません。修正するのは非常に簡単です。秒単位に変更するだけです。
vendor/yiisoft/yii2-redis/Cache.php133 を開き、次のコードに変更します。

れぇ

以上です。

それでは、今日はこれらを共有しましょう。明日と明後日は、Connection、ActiveRecord、yii2-redis の落とし穴についてお話します。

上記は、Yii2-Redis - Cache を使用する際の注意事項を、関連する側面も含めて紹介しました。PHP チュートリアルに興味のある友人の参考になれば幸いです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。