Yii2-Redis を使用する際の最初の注意事項

WBOY
リリース: 2016-06-13 12:23:23
オリジナル
935 人が閲覧しました

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,],
ログイン後にコピー

OK、Yii のキャッシュを引き継ぐために redis が使用されました。キャッシュの使用方法は以前と同じです。 、ただし、バグのバグには当てはまらないことが 1 つあるので、それについては後で説明します。

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

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 を開き、次のコードに変更します。

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]); // 按秒缓存    }}
ログイン後にコピー


大丈夫です。

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート