ホームページ > PHPフレームワーク > YII > Yii フレームワークで MemCache キャッシュを正しく使用する方法

Yii フレームワークで MemCache キャッシュを正しく使用する方法

王林
リリース: 2020-11-18 15:29:39
転載
2410 人が閲覧しました

Yii フレームワークで MemCache キャッシュを正しく使用する方法

具体的な操作は次のとおりです:

(推奨グラフィック チュートリアル: yii)

1. memcache サーバーの構成サーバー

1. memcached ソフトウェア パッケージをダウンロードします。ダウンロード アドレス:

http://pan.baidu.com/s/1boAnghp
ログイン後にコピー

解凍して、memcached.exe を次のような任意の場所に置きます: d:/memcached/ (私は wampserver に解凍しました) bin ディレクトリは php ディレクトリと同じレベルにあります)。

2. Windows R ショートカット キーを使用して cmd と入力し、コマンド ラインにコードを入力して、memcache.exe のディレクトリに切り替えます:

Yii フレームワークで MemCache キャッシュを正しく使用する方法

3. 次のコードを使用して memcache.exe をインストールします: memcached.exe -d install

Yii フレームワークで MemCache キャッシュを正しく使用する方法

4.「memcached.exe -d start」と入力して開始

Yii フレームワークで MemCache キャッシュを正しく使用する方法

設定成功

//memcache常用的函数:
Memcache::add   //添加一个值,如果已经存在,则返回false
Memcache::addServer  // 添加一个可供使用的服务器地址
Memcache::close   //关闭一个Memcache对象
Memcache::connect  // 创建一个Memcache对象
memcache_debug  // 控制调试功能
Memcache::decrement  // 对保存的某个key中的值进行减法操作
Memcache::delete   //删除一个key值
Memcache::flush  // 清除所有缓存的数据
Memcache::get   //获取一个key值
Memcache::getExtendedStats   //获取进程池中所有进程的运行系统统计
Memcache::getServerStatus// 获取运行服务器的参数
Memcache::getStats   //返回服务器的一些运行统计信息
Memcache::getVersion   //返回运行的Memcache的版本信息
Memcache::increment   //对保存的某个key中的值进行加法操作
Memcache::pconnect  // 创建一个Memcache的持久连接对象
Memcache::replace   //对一个已有的key进行覆写操作
Memcache::set   //添加一个值,如果已经存在,则覆写
Memcache::setCompressThreshold   //对大于某一大小的数据进行压缩
Memcache::setServerParams   //在运行时修改服务器的参数
ログイン後にコピー

2. php_memcache.dll 拡張機能をインストールします

1. まず、php バージョンと一致する php_memcache.dll 拡張機能をダウンロードします

アドレス:

http://pan.baidu.com/s/1skJnZIl
ログイン後にコピー

2. コピーして php/ext フォルダーに投稿します

3. php.ini に次のコードを追加し、拡張機能をインポートします:

extension=php_memcache.dll
ログイン後にコピー

3. yii での設定

1. 基本フレームワークを使用している場合: config/web.php

高度なフレームワークを使用している場合: config/main.php## を開きます

#次のコードを追加します:

'cache' => [
    'class' => 'yii\caching\MemCache',
    'servers' => [
        [
            'host' => 'localhost',
            'port' => 11211,
            'weight' => 100,
        ],
        [
            'host' => 'localhost',
            'port' => 11211,
            'weight' => 50,
        ],
    ],
],
ログイン後にコピー

これで、コントローラーのアクション メソッドで次のコードを使用できるようになります:

//缓存MemCache
 
$key='key';
$value='this is the value';
<pre name="code" class="php">Yii::$app->cache->set($key,$value);
echo "lixian";
echo Yii::$app->cache->get($key);
exit();
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

ただし、有効期限を使用する場合:

Yii::$app->cache->set($key,$value,6);//过期时间为6s
echo "lixian";
echo Yii::$app->cache->get($key);
exit();
ログイン後にコピー
出力を実行できません。これはフレームワーク自体のバグです。解決策は次のとおりです:

yii2 で memcache を使用する前に、ドキュメントに従って対応するパラメータを設定します。これは、使用時にわかります。 memcache (非 memcached)。 Yii::$app->cache->set('key','value'); この文で有効時間を秒単位で設定しない場合、キャッシュ内のキーの値は正常に取得できますが、キーの有効期限が切れないことを意味します。

有効時間を設定すると、 Yii::$app->cache->set('key','value',60); たとえば、60 秒経過すると、キーに対応する値が取得できないように表示されます。オンラインやフォーラムで検索しましたが、解決策が見つかりません。多くの PHPer が同様の問題に遭遇しています。参照されている memcache クラスは、Yii2 に付属の yii\caching\MemCache です。 Yii::$app->cache->set('key','value') このコードは、memcache クラスの setValue メソッドを自動的に呼び出してキャッシュを設定するため、ここで問題が発生する可能性があります。

後でテストした後、このメソッドの最後の文を見つけました return $this->useMemcached ? $this->_cache->set($key, $value, $expire) : $this->_cache->set($key, $value, 0, $expire ) 問題があるので、このコードを次のように変更します return $this->useMemcached ? $this->_cache->set($key, $value, $expire) : $this->_cache->set($key, $value, 0, $duration ) その後、再度テストしたところ、問題が解決していることがわかりました。

理由は、このリターン コードで memcache が使用されるときに呼び出されるからです。 $this->_cache->set($key, $value, 0, $expire) 、 に相当 $mem = new Memcache();$mem->set($key,$value,0,$expire); ここで最も重要な点は、memcache によって設定される時間は有効時間が何秒であるかを意味し、memcached によって設定される時間は有効期限が切れる秒数を意味します (time() $duration と同等)。問題が見つかりました その後、元のコードの 2 番目の $expire を $duration に変更することで問題は解決されました。

以上がYii フレームワークで MemCache キャッシュを正しく使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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