IT软件
当前位置 :首页工程软件IT软件

PHP MemCached缓存配置与应用

来源: 作者: 时间:2011-08-12 点击:
1、Memcache 相关介绍

memcache是一个高性能的分布式的内存对象缓存系统,它能够用来存储各种

格式的数据,包括图像、视频、文件以及数据库检索的结果等

使用Memcache的网站一般流量都是比较大的,为了缓解数据库的压力,

让Memcache作为一个缓存区域,把部分信息保存在内存中,在前端能

够迅速的进行存取。

2、Memcache Win32 的安装和PHP中的配置

下载:Memcache Win32

www.jehiah.cz/projects/memcached-win32/

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、Ubuntu下安装Memcache

安装Memcache服务端

sudo apt-get install memcached

安装完Memcache服务端以后,我们需要启动该服务:

memcached -d -m 128 -p 11111 -u root

安装Memcache客户端
sudo apt-get install php5-memcache

安装完以后我们需要在php.ini里进行简单的配置,打开/etc/php5/apache2/php.ini文件在末尾添加如下内容:

[Memcache]

memcache.allow_failover = On

e.max_failover_attempts = 20

memcache.chunk_size = 8192

memcache.default_port = 11111

;memcache.hash_strategy = “standard”

;memcache.hash_function = “crc32″


保存php.ini,执行sudo /etc/init.d/apache2 restart重启Apache。

6、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;
 }
}

上一篇:
下一篇: 已经是最后一篇
最新评论共有 位网友发表了评论
发表评论
用户名: 密码: 游客发言不需要密码