返回列表 发帖

使用memcached集群存储php session

1. 首先安装memcached(略)和php的memcache扩展
  1. 由于3.0.6还是beta版,所以通过pecl安装的时候需要指定版本号
  2. # /usr/local/php/bin/pecl install memcache-3.0.6
复制代码
2. 修改php.ini中session存储方式
注:关于修改php配置的方法请参考:重写php配置的3种方式
  1. session.save_handler = memcache
  2. session.save_path = "tcp://192.168.0.2:11211,tcp://192.168.0.3:11211,tcp://192.168.0.4:11211"
复制代码
3. 在php.ini最下面添加以下内容
  1. [memcache]
  2. extension = memcache.so
  3. memcache.allow_failover = 1
  4. memcache.max_failover_attempts = 3 #重试3次都失败之后开始使用下一台memcached
  5. memcache.chunk_size = 32768 #3.x版本中的默认值
  6. memcache.default_port = 11211
  7. memcache.default_timeout_ms = 1000
  8. memcache.hash_strategy = consistent #保证从写入session的memcached中读取
  9. memcache.session_redundancy = 4 #将session同时写进多个memcached,3.x版本中才支持
复制代码
在我测试过程中发现memcache.session_redundancy的值需要设置的比实际使用的memcached的数量+1,这样才能保证session同时被写入所有的memcaced中。这应该是一个bug,目前关于memcache 3.0扩展新增的几个参数还没有文档,持续关注吧。

4. 重载php配置
  1. # service httpd restart
复制代码

不重启清空memcached中数据的办法:
  1. # yum -y install nc
  2. # echo "flush_all" | nc 127.0.0.1 11211
复制代码

通过php来批量清空memcache的方法
  1. <?php

  2. $link = new Memcache();
  3. $link -> addserver('localhost', 11211);
  4. $link -> addserver('localhost', 11212);
  5. $link -> addserver('localhost', 11213);

  6. if($link -> flush()) {
  7.     echo 'All data has been flushed!' . "\n";
  8. } else {
  9.     die('data flushing not success.');
  10. }

  11. sleep(2);

  12. $link -> close();
复制代码

TOP

TOP

memcache-3.0组件中新增的参数:
  1. memcache.protocol = {ascii, binary}
  2. memcache.redundancy = 1
  3. memcache.session_redundancy = 2
  4. memcache.compress_threshold = 20000
  5. memcache.lock_timeout = 15
复制代码
memcache-3.0组件中修改了以下参数的默认值:
  1. memcache.hash_strategy = consistent
  2. memcache.chunk_size = 32768
复制代码

TOP

返回列表