• 售前

  • 售后

热门帖子
入门百科

PHP实现负载均衡下的session共勤奋能

[复制链接]
极忘投 显示全部楼层 发表于 2021-10-25 19:18:51 |阅读模式 打印 上一主题 下一主题
本文实例报告了PHP实现负载平衡下的session共勤劳能。分享给大家供大家参考,详细如下:
近来忙于开辟台湾运动彩券第四版的步伐,以是已经好久没有上来写东西了,本日任意写点东西和大家分享.
起首说一下负载平衡,信赖大家都知道负载平衡可以很好地办理网站大流量的问题,负载平衡就是把用户的哀求分发到多态pc上进行处理,既然分发了哀求那么session就要考虑利益理方法.传统情况下php会把session存入本机的暂存档内,可是这种情况下分发了之后session就丢失了,着实最简单的办理方法就是用memcache来托管,单独架设一台服务器用来作为memcache服务器(内存最好是大一点),接下来的工作就交给PHP代码来做就好了,这裡我不想修改php.ini,因为每台都改的话太累,而且我又比力懒
或许您会告诉我说直接修改一下php.ini的session存储位置就能写入memcache了,是,没错,但是这种方式却不能调用gc开释掉过期的会话,而本日我们要说的就是不光要让他托管,还得让他自动开释会话.
既然要做,那就要做到完善才行,下边是我的代码,不懂得本身看表明:
  1. $_ENV=array(
  2.   'SYS'=>array(
  3.     'Memip'=>'127.0.0.1',      //MEMCACHE的ip
  4.     'Mempt'=>11211,       //MEMCACHE的port
  5.     'Memtim'=>10,          //MEMCACHE的超時時間
  6.   )
  7. );
  8. //托管SESSION到MEMCACHE,如果开启失败,则说明MEMCACHE没有配置正确
  9. final class S{
  10.   public static function open(){
  11.   //禁止session自动开启
  12.     session_write_close();
  13.   ini_set('session.auto_start',0);
  14.   //使用五十分之一的概率启动gc清理会话
  15.   ini_set('session.gc_probability',1);
  16.   ini_set('session.gc_divisor',50);
  17.   ini_set('session.use_cookies',1);
  18.   //session的寿命
  19.   //ini_set('session.gc_maxlifetime',$_ENV['SYS']['Memtim']);
  20.   //ini_set('session.cookie_lifetime',$_ENV['SYS']['Memtim']);
  21.   //ini_set('session.save_handler','files');
  22.   //ini_set('session.save_path',Run.'_tmp');
  23.   //ini_set('session.save_handler','memcache');
  24.   //ini_set('session.save_path','tcp://127.0.0.1:11211');
  25.     //$_ENV['S_tim'] = ini_get('session.gc_maxlifetime');
  26.   //建立memcache对象
  27.   $_ENV['S_mem']=new Memcache;
  28.   $_ENV['S_mem']->connect($_ENV['SYS']['Memip'],$_ENV['SYS']['Mempt']) or die('Memcache連接失敗!');
  29.     return TRUE;
  30.   }
  31.   /**
  32.     读取
  33.     返回:读到的內容
  34.   /**/
  35.   public static function read($id){
  36.     return $_ENV['S_mem']->get('s_'.$id);
  37.   }
  38.   /**
  39.     写入
  40.     返回:bool
  41.   /**/
  42.   public static function write($id,$data){
  43.     return $_ENV['S_mem']->set('s_'.$id,$data,MEMCACHE_COMPRESSED,$_ENV['SYS']['Memtim']);
  44.   }
  45.   /**
  46.     关闭
  47.     返回:bool
  48.   /**/
  49.   public static function close(){
  50.     $_ENV['S_mem']->close();
  51.     unset($_ENV['S_mem'],$_ENV['SYS']['Memtim']);
  52.     return TRUE;
  53.   }
  54.   /**
  55.     刪除
  56.     返回:bool
  57.   /**/
  58.   public static function destroy($id){
  59.     return $_ENV['S_mem']->delete('s_'.$id);
  60.   }
  61.   /**
  62.     清理
  63.     返回:bool
  64.   /**/
  65.   public static function gc(){
  66.     return TRUE;
  67.   }
  68. }
  69. session_set_save_handler('S::open','S::close','S::read','S::write','S::destroy','S::gc');
  70. $_ENV['sessionid']=(isset($_REQUEST['sessionid'])) ? trim($_REQUEST["sessionid"]) : session_id();
  71. if($_ENV['sessionid']!=''){session_id($_ENV['sessionid']);}
  72. session_start();
复制代码
更多关于PHP相干内容感兴趣的读者可检察本站专题:《php缓存技能总结》、《PHP数组(Array)操作本事大全》、《php字符串(string)用法总结》、《PHP错误与非常处理方法总结》、《php面向对象步伐设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作本事汇总》
渴望本文所述对大家PHP步伐设计有所帮助。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作