Maison  >  Article  >  cadre php  >  Comment utiliser correctement le cache MemCache dans le framework Yii

Comment utiliser correctement le cache MemCache dans le framework Yii

王林
王林avant
2020-11-18 15:29:392356parcourir

Comment utiliser correctement le cache MemCache dans le framework Yii

Les opérations spécifiques sont les suivantes :

(Tutoriel graphique recommandé : yii)

1. Configurer le serveur memcache. serveur

1. Téléchargez le progiciel memcached. Adresse de téléchargement :

http://pan.baidu.com/s/1boAnghp

Décompressez-le et placez memcached.exe à n'importe quel endroit, par exemple : d:/memcached/ (je l'ai décompressé sur mon ordinateur). wampserver Le répertoire bin est au même niveau que le répertoire php).

2. Utilisez la touche de raccourci Windows+R pour saisir cmd, saisissez le code dans la ligne de commande et passez au répertoire de memcache.exe :

Comment utiliser correctement le cache MemCache dans le framework Yii

3. Entrez le code suivant pour installer memcache.exe : memcached.exe -d install

Comment utiliser correctement le cache MemCache dans le framework Yii

4. Entrez memcached.exe -d start pour démarrer

Comment utiliser correctement le cache MemCache dans le framework Yii

Configuration réussie

//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. Installez l'extension php_memcache.dll

1. Téléchargez d'abord l'extension php_memcache.dll qui correspond à votre version de php

Adresse :

http://pan.baidu.com/s/1skJnZIl

2. Copiez-la et publiez-la dans votre dossier php/ext

3 Ajoutez le code suivant dans php.ini et importez l'extension :

extension=php_memcache.dll
<.>3. Dans yii Configuration

1. Si vous utilisez le framework de base : ouvrez config/web.php

Si vous utilisez le framework avancé : ouvrez config/main.php

Ajoutez le code suivant :

&#39;cache&#39; => [
    &#39;class&#39; => &#39;yii\caching\MemCache&#39;,
    &#39;servers&#39; => [
        [
            &#39;host&#39; => &#39;localhost&#39;,
            &#39;port&#39; => 11211,
            &#39;weight&#39; => 100,
        ],
        [
            &#39;host&#39; => &#39;localhost&#39;,
            &#39;port&#39; => 11211,
            &#39;weight&#39; => 50,
        ],
    ],
],

Vous pouvez désormais utiliser le code suivant dans la méthode d'action de votre contrôleur :

//缓存MemCache
 
$key=&#39;key&#39;;
$value=&#39;this is the value&#39;;
<pre name="code" class="php">Yii::$app->cache->set($key,$value);
echo "lixian";
echo Yii::$app->cache->get($key);
exit();

 Mais lorsque vous utilisez le délai d'expiration : 

Yii::$app->cache->set($key,$value,6);//过期时间为6s
echo "lixian";
echo Yii::$app->cache->get($key);
exit();

Il ne peut pas être généré. Il s'agit d'un bug dans le framework lui-même. La solution est la suivante :

Configurez les paramètres correspondants selon le document avant d'utiliser memcache dans yii2. memcache (non-memcache) Yii::$app->cache->set('key','value'); Lorsque cette phrase ne fixe pas la durée de validité en secondes, la valeur de la clé dans le cache peut être obtenue normalement, mais cela signifie que la clé n'expirera pas.

Lorsque l'heure de validité est réglée, Yii::$app->cache->set('key','value',60); Par exemple, au bout de 60 secondes, il apparaîtra que la valeur correspondant à la clé ne peut pas être obtenue. Après des recherches en ligne et sur les forums, je n'ai pas trouvé de solution. De nombreux PHPers ont rencontré des problèmes similaires. Je suis donc allé jeter un œil au code sous-jacent. La classe memcache référencée est la yiicachingMemCache fournie avec Yii2. Yii::$app->cache->set('clé','valeur') Ce code appellera automatiquement la méthode setValue sous la classe memcache pour définir le cache, le problème peut donc survenir ici.

Après avoir testé plus tard, j'ai trouvé la dernière phrase de cette méthode return $this->useMemcached ? $this->_cache->set($key, $value, $expire) : $this->_cache->set($key, $value, 0, $expire ) problème, change ce code en return $this->useMemcached ? $this->_cache->set($key, $value, $expire) : $this->_cache->set($key, $value, 0, $duration ) Ensuite, j'ai testé à nouveau et j'ai constaté que le problème avait été résolu.

La raison est qu'il est appelé lorsque Memcache est utilisé dans ce code retour $this->_cache->set($key, $value, 0, $expire) , équivalent à $mem = new Memcache();$mem->set($key,$value,0,$expire); Le point le plus critique ici est : l'heure à définir par memcache signifie le nombre de secondes de l'heure effective, et l'heure à définir par memcached signifie la seconde à laquelle elle expirera (équivalent à time()+$duration), le problème est donc trouvé. Ensuite, le problème a été résolu en changeant le deuxième $expire dans le code d'origine en $duration.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer