使用Memcache做为php的Session Handler
在为php安装了memcache模块后查看该模块的说明文件,发现他还可以直接作为php的session handler使用,而无需做做额外的编码处理。
设置方法很简单,只要修改php.ini中的以下键的值
-
session.save_handler = memcache
-
session.save_path = 'tcp://127.0.0.1:11211' #有多个时直接用","分隔即可
要测试一下是否真的用上了memcache,可以先获取使用的PHPSESSID,然后将其作为KEY用memcach去读一下,就知道了。
使用memcache做php的session handler好处
- 使用内存存放session信息,不经过磁盘,数据库等,速度快
- 可以多台机器共用一个/组memcached服务器,达到多台机器共享session信息,方便多机集群的session问题处理。
- …
使用memcache做为php的session handler坏处
- 首先memcached的服务必须正常工作,否则php的session相关功能将不起作用,这样php的处理就多了一层外面的依赖。
- 由于memcached是使用内存的,这样当用户量比较大时,就可能由于内存方面原因导致session时长上的问题,session的实际失效时长达不到设定的失效时长(由于memcached在内存不够下的处理机制决定)
- 由于memcached的内存管理机制,当session存储的数据超过1MB的时候有数据丢失问题(不过一般不会有人在session中存放这么多的信息吧)。
- …
根据以上的一些情况决定自己在实际环境中是否使用memcache做为php的session handler
Popularity: 4% [?]
Related
为php添加Memcache模块
memcached不用说了,都知道是做数据缓冲用的,这里为 php 添加memcached 的支持。
php的memcache 模块地址 http://pecl.php.net/package/memcache
通过
-
wget http://pecl.php.net/get/memcache-2.2.3.tgz
下载源码包。
编译安装源码包
-
tar -zxvf memcache-2.2.3.tgz
-
cd memcache-2.2.3/
-
/usr/local/php526/bin/phpize
-
./configure –with-php-config=/usr/local/ php526/bin/php-config
-
make
-
make install
-
cd ../
配置php.ini
修改 /usr/local/php526/etc/php.ini 文件,搜索其中的
extension_dir = “./”
将其修改为extension_dir = “/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/”
并在后面的一堆 extension 列表后面添加如下的设置
extension = “memcache.so”
验证安装
Popularity: 4% [?]
Related
安装memcached服务
memcached网站 http://danga.com/memcached/, memcached依赖libevent,首先要下载安装libevent库和memcached的源码包。
通过
-
wget http://www.monkey.org/~provos/libevent-1.4.5-stable.tar.gz
-
wget http://danga.com/memcached/dist/memcached-1.2.5.tar.gz
获取源码包
安装libevent库
-
tar –xzvf libevent-1.4.5-stable.tar.gz
-
cd libevent-1.4.5-statble
-
./configure
-
make
-
make install
将libevent安装的/usr/local/lib输出到引用库路径
-
vi ~/.bash_profile
加入如下一行:
-
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
编译安装memcached
-
tar –xzvf memcached-1.2.5.tar.gz
-
cd memcached-1.2.5
-
./configure
-
make
-
make install
启动 memcached 服务
在本机127.0.0.1 11211 端口上开1G的内存缓冲
-
memcached -d -m 1024 -l 127.0.0.1 -p 11211
开放Iptables端口
打开在本机127.0.0.1上的11211端口访问
-
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 11211 -d 127.0.0.1 -j ACCEPT
验证安装
1.使用
-
netstat -na |grep 11211
查看memcached服务的端口开放情况
Popularity: 3% [?]
Related
Memcached的最佳实践和内部机制(译)
原始文章 Memcached Internals 是在 2008年MySQL Conf 上的一篇 http://www.igvita.com/2008/04/22/mysql-conf-memcached-internals/
本文对memcached的使用提出了一些建议,并讲述了一些memcached内部的一些实现机制。是我们可以更好的理解应用memcached。
Memcached的最佳实践
Memcached是一个高性能的分布式缓存系统,它是独立应用的,当前被许多大型的网站使用,比如Facebook(在2008年第一季度有2TB的缓存), Livejournal, Mixi, Hi5等,然而他也是一个极端简单的软件:所有的逻辑在客户端,没有安全模型,容灾处理,备份机制或持久化。然而这些并不影响他被开发这发布到各种情况的环境中,如下有Brian做的一些关于memcached的最佳时间的建议:
1.不要想行级别(数据库)的缓存,考虑复杂对象。
2.不要在数据库服务器上运行memcached,给你的数据库提供一切可能使用的内存。
3.不要担心TCP的延迟-本机的TCP/IP已经被优化为内存拷贝。
4.考虑 multi-get-在任何可能的情况下用并发来处理事情。
5.不是所有的memcached客户端都是等同的,做你自己的调研。-提示使用 Brians 的。
片分配器-memcached的心脏
memcached的心脏是他的内存片分配器,第一感觉令人有点畏惧,但是当你明白他架构中所采用的平衡机制等,你会从内心中体会出他确实是一个高雅的解决方案。
1.memcached所能分配的内存最大值仅由系统的架构决定(32/64位)
2.key值大小限制到250字节,data值大小限制到1mb
3.在启动时,memcached获取需要的内存-在性能前浪费内存
4.分配的内存由片分配器切分为不同大小的桶。
5.默认情况下片分配器将创建32-39个桶用来存放最大到1mb大小的对象。
6.你可以在编译时设置页大小,并在启动时设置片大小。
7.每一个被存储的对象存在最相近大小的桶中-是的,内存是被浪费的。
8.碎片是个问题-无论是定义片大小或时常回收/冲刷你的缓存。
9.如果在一个不同的片类中没有未被使用的内存,该内存将在需要的时候被重分配。
10.保证 no-paging,禁用你系统的交换空间(swap)-实用的是将他变小来避免出问题。
内存管理
内存管理使用的是LRU算法
1.每一个片类有他自己的LRU-回收目标依赖于对象的大小
2.没秒钟检查一次截止时间戳-最小寿命是1秒
3.异步处理被标志为删除的对象-每5秒检查回收一次
4.上面两个时间的不一致会导致次最佳回收规则
5.可以完全禁用LRU-这样做自己担当风险
关于失效和截止期的最佳实践
Memcached不提供任何关于删除一个相关联key集合(对象,名称等等)的机制.不管是好是坏,你需要在prepend和append命令的帮助下自己实现该功能,然而,需要小心这个1mb 大小的限制。一个非常简单的处理该情况的方式是完全放弃一起失效过程。
1.在任何可能的时候通过设置截止时间来使你的数据失效-memcached会做所有的工作。
2.生成有提示性的key-比如,在更新,添加一个版本号,将成为key的一部分
3.作为奖励点,在memcached中存储版本号-称作一代
4.后面的将会很快添加到memcached中-只要 Brian 考虑做他。
Roadmap和未来展望
1.二进制协议在处理中
2.支持代处理-前面章节提到
3.多引擎支持:基于字符的,持久的,队列的
4.Facebook已经修改过的核心,有望被贡献出来。
感谢Brian和Alan的伟大工作,不要忘记做书签并常回来看看(指原文)。
Popularity: 3% [?]
Related
Nignx配合Memcached提升400%性能(阅读笔记)
原始文章: http://www.igvita.com/2008/02/11/nginx-and-memcached-a-400-boost/
原文引用了 http://nubyonrails.com/articles/about-this-blog-memcached
和 http://blog.leetsoft.com/2007/5/22/the-secret-to-memcached
都是讲述怎样在Rails中使用memcached的(主要是key的设定方式和怎样对memcached的使用做类的包装)
文章在两篇引用文章的基础上直接将memcached的使用提升到url层,通过nginx对memcached的原生支持,讲述了一种利用url rewrite机制来直接将url请求地址作为key给memcached做处理,用以提升访问速度。
首先在编译 nginx 时要添加 memcached 模块编译,nginx 的 memcached 模块配置参数说明见 http://wiki.codemongers.com/NginxHttpMemcachedModule
文章讲述利用 url rewrite 机制来做key validate 的自动化处理,主要讲了一下url rewrite和mime type的配合问题。
本文启发
1.网站url地址要好规划,这样可以将不同类别的资源做分组,方便以后的统一处理,添加缓冲之类的。
2.怎样确定内容的修改频度,自动话的处理?如果是动态的对数据敏感新强的页面。
3.有没有方法可以在url层做validate time 的规范话处理(资源的更新频度,每小时,每天等等)。
Popularity: 3% [?]