PHP MemCached缓存配置与应用
1、Memcache 相关介绍
memcache是一个高性能的分布式的内存对象缓存系统,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等,使用Memcache的网站一般流量都是比较大的,为了缓解数据库的压力,让Memcache作为一个缓存区域,把部分信息保存在内存中,在前端能够迅速的进行存取。
2、Memcache Win32 的安装和PHP中的配置
下载:Memcache Win32
http://www.jz123.cn/soft/7/286/2010/2010020118056.html
1)、解压到目录:d: memcached (自定义,任何目录)
2)、d: memcachedmemcached.exe -d install
3)、d: memcached memcached.exe -d start (启动服务)
4)、telnet 127.0.0.1 11211 (使用telnet连接测试是否成功)
5)、输入:stats 命令查看基本信息
PHP中配置 Memcache
1)、下载:php_memcache.dll 组件
2)、复制 php_memcache.dll 到指定的组件目录,默认在 phpext
3)、在PHP.ini 加入一句话:extension=php_memcache.dll
4)、重启WEB服务,使用 phpinfo() 函数查看启用情况
3、PHP中测试 Memcache功能
$mem = new Memcache;//实例化Memcache
$mem->connect(’127.0.0.1′, 11211) or die (“连接失败“);//连接
$mem->getVersion();//获得版本信息 ,可使用echo 打印
Memcache 的方法使用
$memcache = new memcache;
$memcache->connect(’127.0.0.1′, 11211) or die (“连接失败“);
$memcache->set(‘Key’, ‘Value‘, ‘Zip’, ‘Time’);
$val = $memcache->get(‘Key‘);
set方法添加一个缓存值(键名,键值,是否压缩,保持时间)
get通过键名,获取缓存中的内容
4、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 — R对一个已有的key进行覆写操作
Memcache::set — 添加一个值,如果已经存在,则覆写
Memcache::setCompressThreshold — 对大于某一大小的数据进行压缩
Memcache::setServerParams — 在运行时修改服务器的参数
5、memcached加锁解锁实例
$memcache = new Memcache();
$memcache->addServer('127.0.0.1', 11211);
if (mem_lock($memcache, 'newisbn')) {
$maxisbn = $db->getOne("select max(isbn) as maxisbn from sd_goods_fetch where isbn like '%SD'");
if (!$maxisbn) $maxisbn = $db->getOne("select max(isbn) as maxisbn from sd_goods where isbn like '%SD'");
if (!$maxisbn) $maxisbn = '97800000000SD';
$isbn = (str_replace('SD', '', $maxisbn)+1).'SD';
$goods_temp_arr['isbn'] = $isbn;
$goods_temp_arr['qty'] = 1;
$goods_temp_arr['admin_id'] = $uid;
$goods_temp_arr['fetch_id'] = $fid;
$goods_temp_arr['addtime'] = time();
$res = $db->insert($_CFG["TABLE"]["LIST"]['goods_fetch'], $goods_temp_arr);
if ($res) echo "<script>alert('新建ISBN成功!');</script>";
else echo "<script>alert('新建ISBN失败!');</script>";
} else {
echo "<script>alert('页面被锁定,暂时无法进行本操作,请稍后再试!');</script>";
}
$memcache->delete('newisbn');
$current_page = "goods_fetch.php?fid=" . $fid;
echo "<script>window.location.href='" . $current_page . "'</script>";
/**
* memcache加锁函数
* @param object $memcache
* @param string $newisbn
* @param int $times
* @return boolean
*/
function mem_lock($memcache, $newisbn, $times = 0) {
$lock = $memcache->add('newisbn', $newisbn, false, 120);
if ($lock) {
return true;
} else {
sleep(1);
if ($times < 10) mem_lock($memcache, $newisbn, $times+1);
else return false;
}
}
评注:整理了一些PHP memcache 的缓存的常用的使用方法,使用PHP memcache 来做加速引擎,可以使用PHP的速度更快速。