使用Memcache做为php的Session Handler

在为php安装了memcache模块后查看该模块的说明文件,发现他还可以直接作为php的session handler使用,而无需做做额外的编码处理。

设置方法很简单,只要修改php.ini中的以下键的值

  1. session.save_handler = memcache
  2. session.save_path = 'tcp://127.0.0.1:11211'  #有多个时直接用","分隔即可

要测试一下是否真的用上了memcache,可以先获取使用的PHPSESSID,然后将其作为KEY用memcach去读一下,就知道了。

使用memcache做php的session handler好处

  1. 使用内存存放session信息,不经过磁盘,数据库等,速度快
  2. 可以多台机器共用一个/组memcached服务器,达到多台机器共享session信息,方便多机集群的session问题处理。

使用memcache做为php的session handler坏处

  1. 首先memcached的服务必须正常工作,否则php的session相关功能将不起作用,这样php的处理就多了一层外面的依赖。
  2. 由于memcached是使用内存的,这样当用户量比较大时,就可能由于内存方面原因导致session时长上的问题,session的实际失效时长达不到设定的失效时长(由于memcached在内存不够下的处理机制决定)
  3. 由于memcached的内存管理机制,当session存储的数据超过1MB的时候有数据丢失问题(不过一般不会有人在session中存放这么多的信息吧)。

根据以上的一些情况决定自己在实际环境中是否使用memcache做为php的session handler

Popularity: 4% [?]

Related

为php添加Memcache模块

memcached不用说了,都知道是做数据缓冲用的,这里为 php 添加memcached 的支持。
php的memcache 模块地址 http://pecl.php.net/package/memcache
通过

  1. wget http://pecl.php.net/get/memcache-2.2.3.tgz

下载源码包。

编译安装源码包

  1. tar -zxvf memcache-2.2.3.tgz
  2. cd memcache-2.2.3/
  3. /usr/local/php526/bin/phpize
  4. ./configure –with-php-config=/usr/local/ php526/bin/php-config
  5. make
  6. make install
  7. 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的源码包。
通过

  1. wget http://www.monkey.org/~provos/libevent-1.4.5-stable.tar.gz
  2. wget http://danga.com/memcached/dist/memcached-1.2.5.tar.gz

获取源码包

安装libevent库

  1. tar –xzvf libevent-1.4.5-stable.tar.gz
  2. cd libevent-1.4.5-statble
  3. ./configure
  4. make
  5. make install

将libevent安装的/usr/local/lib输出到引用库路径

  1. vi ~/.bash_profile

加入如下一行:

  1. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

编译安装memcached

  1. tar –xzvf memcached-1.2.5.tar.gz
  2. cd memcached-1.2.5
  3. ./configure
  4. make
  5. make install

启动 memcached 服务

在本机127.0.0.1 11211 端口上开1G的内存缓冲

  1. memcached -d -m 1024 -l 127.0.0.1 -p 11211

开放Iptables端口

打开在本机127.0.0.1上的11211端口访问

  1. -A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 11211 -d 127.0.0.1 -j ACCEPT

验证安装

1.使用

  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% [?]

Related