首頁 > php框架 > YII > 主體

Yii框架如何正確使用MemCache緩存

王林
發布: 2020-11-18 15:29:39
轉載
2368 人瀏覽過

Yii框架如何正確使用MemCache緩存

具體操作如下:

(圖文教學建議:yii

一、設定memcache server 伺服器

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   //在运行时修改服务器的参数
登入後複製

二、安裝php_memcache.dll擴充功能

#1、先下載符合你的php版本的php_memcache.dll擴充

#你位址:

http://pan.baidu.com/s/1skJnZIl
登入後複製

2、複製張貼在你的php/ext資料夾裡

3、在php.ini裡面加入以下程式碼,導入擴充:

extension=php_memcache.dll
登入後複製

三、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,
        ],
    ],
],
登入後複製

現在就可以在你的控制器的action方法中使用如下程式碼了:

//缓存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();
登入後複製
就輸出不了了,這是框架本身的一個bug,解決方法如下:

在yii2使用memcache前根據文件配置好對應的參數,在使用memcache(非memcached)過程中會發現 Yii::$app->cache->set('key','value'); 當這句話沒有設定有效時間為多少秒時,可以正常取得到快取中鍵為key的值,但表示此key不過期。

當設定了有效時間時, Yii::$app->cache->set('key','value',60); 例如60秒,就會出現取不到key對應的value值,網路和論壇裡搜了搜,沒有找到解決方法,也有很多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 ) 後,再測試發現問題已經解決。

原因則是這句return程式碼裡使用memcache時呼叫的 $this->_cache->set($key, $value, 0, $expire) ,相當於 $mem = new Memcache();$mem->set($key,$value,0,$expire); 這裡最關鍵的一點是:memcache要設定的時間的含義是有效時間為多少秒,memcached要設定的時間的含義是在哪一秒到期(等效於time() $duration),所以發現問題所在之後將原來程式碼裡的第二個$expire改成$duration問題就解決了。

以上是Yii框架如何正確使用MemCache緩存的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板