Chinaunix首页 | 论坛 | 博客
  • 博客访问: 955282
  • 博文数量: 245
  • 博客积分: 11429
  • 博客等级: 上将
  • 技术积分: 2662
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-15 00:16
文章存档

2011年(56)

2010年(174)

2009年(15)

分类:

2009-08-20 23:00:44

Linuxphp-memcache-APC的安装与配置

环境:redhat5 http php memcache memcached libevent

<> <> < test is This>

缘起在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载。缓存是解决这个问题的好办法。但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够灵活。此时Memcached或许是你想要的。
Memcached是什么?
Memcached是由Danga Interactive开发的,高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。
Memcached能缓存什么?
通过在内存里维护一个统一的巨大的hash表,Memcached能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。
Memcached快么?

非常快。Memcached使用了libevent(如果可以的话,在linux下使用epoll)来均衡任何数量的打开链接,使用非阻塞的网络I/O,对内部对象实现引用计数(因此,针对多样的客户端,对象可以处在多样的状态), 使用自己的页块分配器和哈希表, 因此虚拟内存不会产生碎片并且虚拟内存分配的时间复杂度可以保证为O(1).
Danga Interactive为提升Danga Interactive的速度研发了Memcached。目前,LiveJournal.com每天已经在向一百万用户提供多达两千万次的页面访问。而这些,是由一个由web服务器和数据库服务器组成的集群完成的。Memcached几乎完全放弃了任何数据都从数据库读取的方式,同时,它还缩短了用户查看页面的速度、更好的资源分配方式,以及Memcache失效时对数据库的访问速度。
Memcached的特点
Memcached的缓存是一种分布式的,可以让不同主机上的多个用户同时访问, 因此解决了共享内存只能单机应用的局限,更不会出现使用数据库做类似事情的时候,磁盘开销和阻塞的发生。
Memcached的使用

# wget 
# tar xzvf libevent-1.4.9-stable.tar.gz
# ./configure && make && make install
# ln -s /usr/local/lib/libevent-1.4.so.2 /usr/lib

# wget 
# tar xzvf memcached-1.2.8.tar.gz
# ./configure --prefix=/usr/local/memcached --with-libevent=/usr/
# make && make install

# wget 
# tar xzvf memcache-2.2.5.tgz
# /usr/local/php5/bin/phpize
# ./configure --with-php-config=/usr/local/php5/bin/php-config \
  --with-apxs=/usr/sbin/apxs 
--with-gettext \
--enable-socket \
--enable-memcache \
--enable-sysvshm \
--enable-shmop
# make && make install
# ln -s /usr/local/memcached/bin/memcached /etc/init.d/memcached
# /etc/init.d/memcached -d -m 512 -u root -l 127.0.0.1 -p 11211
            参数解释:
            -d 以守护程序(daemon)方式运行 memcached
            -m 设置 memcached 可以使用的内存大小,单位为 M
            -l 设置监听的 IP 地址,如果是本机的话,通常可以不设置此参数;
            -p 设置监听的端口,默认为 11211,所以也可以不设置此参数;
            -u 指定用户,如果当前为 root 的话,需要使用此参数指定用户。

当然,还有其它参数可以用,man memcached 一下就可以看到了。


# vi /etc/php.ini
extensions_dir=/usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/
extensions=memcache.so

# /etc/init.d/httpd restart

memcache php api 包提供了一个memcache.php文件,可以拷贝到web目录下,修改一下用户名密码,配置一下memcache服务器地址,就可以通过对memcache进行管理了。

Memcache.php 里有用户名和密码

参考文档:

http://meizhini.javaeye.com/blog/185165


APC
# wget 
# tar xzvf APC-3.0.19.tgz
# /usr/local/php5/bin/phpize
# ./configure --prefix=/usr/local/apc \
--with-php-config=/usr/local/php5/bin/php-config \
--with-apxs=/usr/local/apache2/bin/apxs \
--enable-apc \
--enable-apc-mmap \
--sysconfdir=/etc
# make && make install

# vi /etc/php.ini
extensions=memcache.so
[APC]
apc.enabled=1
apc.shm_segments=1
apc.shm_size=512
apc.ttl=7200
apc.user_ttl=7200
apc.num_files_hint=1024
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.enable_cli=1

php_apc.dll 下载地址:

分布式的推荐用memcache,单机版的推荐APC

3、测试脚本
自己写一个PHP程序测试一下吧


$memcache = new Memcache; //创建一个memcache对象
$memcache->connect('localhost', 11211) or die ("Could not connect"); //连接Memcached服务器
$memcache->set('key', 'test'); //设置一个变量到内存中,名称是key 值是test
$get_value = $memcache->get('key'); //从内存中取出key的值
echo $get_value;
?>

II. php.ini配置项[APC]段详解 

引用 

[apc] 

; alternative php cache 用于缓存和优化php中间代码 

apc.cache_by_default = on 

;sys 

是否默认对所有文件启用缓冲。 

若设为off并与以加号开头的apc.filters指令一起用,则文件仅在匹配过滤器时才被缓存。 

apc.enable_cli = off 

;sys 

是否为cli版本启用apc功能,仅用于测试和调试目的才打开此指令。 

apc.enabled = on 

是否启用apc,如果apc被静态编译进php又想禁用它,这是唯一的办法。 

apc.file_update_protection = 2 

;sys 

当你在一个运行中的服务器上修改文件时,你应当执行原子操作。 

也就是先写进一个临时文件,然后将该文件重命名(mv)到最终的名字。 

文本编辑器以及 cp, tar 等程序却并不是这样操作的,从而导致有可能缓冲了残缺的文件。 

默认值 表示在访问文件时如果发现修改时间距离访问时间小于 秒则不做缓冲。 

那个不幸的访问者可能得到残缺的内容,但是这种坏影响却不会通过缓存扩大化。 

如果你能确保所有的更新操作都是原子操作,那么可以用 关闭此特性。 

如果你的系统由于大量的io操作导致更新缓慢,你就需要增大此值。 

apc.filters = 

;sys 

一个以逗号分隔的posix扩展正则表达式列表。 

如果源文件名与任意一个模式匹配,则该文件不被缓存。 

注意,用来匹配的文件名是传递给include/require的文件名,而不是绝对路径。 

如果正则表达式的第一个字符是"+"则意味着任何匹配表达式的文件会被缓存, 

如果第一个字符是"-"则任何匹配项都不会被缓存。"-"是默认值,可以省略掉。 

apc.ttl = 0 

;sys 

缓存条目在缓冲区中允许逗留的秒数。表示永不超时。建议值为7200~36000。 

设为 意味着缓冲区有可能被旧的缓存条目填满,从而导致无法缓存新条目。 

apc.user_ttl = 0 

;sys 

类似于apc.ttl,只是针对每个用户而言,建议值为7200~36000。 

设为 意味着缓冲区有可能被旧的缓存条目填满,从而导致无法缓存新条目。 

apc.gc_ttl = 3600 

;sys 

缓存条目在垃圾回收表中能够存在的秒数。 

此值提供了一个安全措施,即使一个服务器进程在执行缓存的源文件时崩溃, 

而且该源文件已经被修改,为旧版本分配的内存也不会被回收,直到达到此ttl值为止。 

设为零将禁用此特性。 

apc.include_once_override = off 

;sys 

关于该指令目前尚无说明文档,参见:

请保持为off,否则可能导致意想不到的结果。 

apc.max_file_size = 1m 

;sys 

禁止大于此尺寸的文件被缓存。 

apc.mmap_file_mask = 

;sys 

如果使用–enable-mmap(默认启用)apc编译了mmap支持, 

这里的值就是传递给mmap模块的mktemp风格的文件掩码(建议值为"/tmp/apc.xxxxxx")。 

该掩码用于决定内存映射区域是否要被file-backed或者shared memory backed。 

对于直接的file-backed内存映射,要设置成"/tmp/apc.xxxxxx"的样子(恰好6x)。 

要使用posix风格的shm_open/mmap就需要设置成"/apc.shm.xxxxxx"的样子。 

你还可以设为"/dev/zero"来为匿名映射的内存使用内核的"/dev/zero"接口。 

不定义此指令则表示强制使用匿名映射。 

apc.num_files_hint = 1000 

;sys 

; web服务器上可能被包含或被请求的不同源文件的大致数量(建议值为1024~4096)。 

如果你不能确定,则设为 ;此设定主要用于拥有数千个源文件的站点。 

apc.optimization = 0 

优化级别(建议值为 0 ) 。 

正整数值表示启用优化器,值越高则使用越激进的优化。 

更高的值可能有非常有限的速度提升,但目前尚在试验中。 

apc.report_autofilter = off 

;sys 

是否记录所有由于early/late binding原因而自动未被缓存的脚本。 

apc.shm_segments = 1 

;sys 

为编译器缓冲区分配的共享内存块数量(建议值为1)。 

如果apc耗尽了共享内存,并且已将apc.shm_size指令设为系统允许的最大值, 

你可以尝试增大此值。 

apc.shm_size = 30 

;sys 

每个共享内存块的大小(mb为单位,建议值为128~256)。 

有些系统(包括大多数bsd变种)默认的共享内存块大小非常少。 

apc.slam_defense = 0 

;sys(反对使用该指令,建议该用apc.write_lock指令

在非常繁忙的服务器上,无论是启动服务还是修改文件, 

都可能由于多个进程企图同时缓存一个文件而导致竞争条件。 

这个指令用于设置进程在处理未被缓存的文件时跳过缓存步骤的百分率。 

比如设为75表示在遇到未被缓存的文件时有75%的概率不进行缓存,从而减少碰撞几率。 

鼓励设为 来禁用这个特性。 

apc.stat = on 

;sys 

是否启用脚本更新检查。 

改变这个指令值要非常小心。 

默认值 on 表示apc在每次请求脚本时都检查脚本是否被更新, 

如果被更新则自动重新编译和缓存编译后的内容。但这样做对性能有不利影响。 

管理员在2009年8月13日编辑了该文章文章。

-->
阅读(1321) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~