• 技术文章 >php框架 >YII

    Yii框架如何正确使用MemCache缓存

    VV2020-11-18 15:29:39转载85

    具体操作如下所示:

    (图文教程推荐:yii

    一、配置memcache server 服务器

    1、下载memcached软件包,下载地址:

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

    解压,把memcached.exe放到随意一个地方,比如:d:/memcached/下(我解压到了我的wampserver的bin目录下与php目录同级)。

    2、windows+R快捷键输入cmd, 在命令行中输入一下代码,切换到memcache.exe的目录下:

    1d6798e555534f1b653a66e5b3f6efa.png

    3、输入如下代码安装memcache.exe: memcached.exe -d install

    299809c8d8fcd8f751db5324b0d88b1.png

    4、输入memcached.exe -d start启动

    d4af9fc5457f4f38cc02105f2e0bdee.png

    配置成功

    //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();
    </pre><pre>

    但是当你使用过期时间时即:

    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,如有侵犯,请联系a@php.cn删除
    专题推荐:Yii 框架 MemCache 缓存
    上一篇:Yii如何获取网站根目录 下一篇:yii2中model和activeRecord有什么区别
    第14期线上培训班

    相关文章推荐

    • Memcached下的PHP扩展如何安装使用?• memcached php扩展安装目录在哪• php安装memcache扩展的方法是什么• php怎么正确安装memcache扩展

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网