ホームページ >バックエンド開発 >PHPチュートリアル >Yii2-Redis 使用上の注意 - キャッシュ
私は数日前に 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.php 行 133 を開き、次のコードに変更します。
以上です。
上記は、Yii2-Redis - Cache を使用する際の注意事項を、関連する側面も含めて紹介しました。PHP チュートリアルに興味のある友人の参考になれば幸いです。