- 浏览: 2539758 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (676)
- linux运维 (157)
- php (65)
- mysql (78)
- nginx (27)
- apche (18)
- framework (6)
- windows (9)
- IDE工具 (23)
- struts2 (7)
- java (13)
- 移动互联网 (14)
- memcache redis (23)
- shell基础/命令/语法 (37)
- shell (50)
- puppet (4)
- C (11)
- python (9)
- 产品经理 (27)
- Sphinx (4)
- svn (12)
- 设计构建 (12)
- 项目管理 (44)
- SEO (1)
- 网站架构 (26)
- 审时度势 (42)
- 网络 (14)
- 激发事业[书&视频] (81)
- 其它 (12)
- 摄影 (8)
- android (21)
最新评论
-
zhongmin2012:
原文的书在哪里
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
renzhengzhi:
你好,请问个问题,从master同步数据到slave的时候,s ...
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
ibc789:
你好,看了你的文章,我想请教个问题, 我在用 redis的时候 ...
redis 的两种持久化方式及原理 -
iijjll:
写得非常好
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
iijjll:
写得非常好
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器
========================================================php.ini session memcache
实现Session的功能,基本上是通过
* 设置客户端的Cookie来保存SessionID,
* 然后把用户的数据保存在服务器端,最后通
* Cookie中的Session Id来确定一个数据是否是用户的,
原始
session.save_handler = files
mem:
session.save_handler = memcache
session.save_path = "tcp://192.168.0.26:13001,tcp://192.168.0.26:13002"
session.use_cookies = 1
//memcache 配置数组
$memcache_servers=array(
array("host"=>"192.168.0.26",
"port"=>"14001",
"persistent"=>true,
"weight"=>1,
"timeout"=>1,//1为默认值,单位为秒
"retry_interval"=>2,
"status"=>true,
"failure_callback"=>"memcacheConnectLog"
),
array("host"=>"192.168.0.26",
"port"=>"14002",
"persistent"=>true,
"weight"=>1,
"timeout"=>1,//1为默认值,单位为秒
"retry_interval"=>2,
"status"=>true,
"failure_callback"=>"memcacheConnectLog" //写入日志函数
)
);
一直以来,由于php本身的session机制不能跨机,令很多phper感到不爽,现在流行的解决方案主要有:
1)使用数据库来实现
2)自己写server端,通过改写session处理函数来请求
3)使用nfs等跨机存储来保存session
4)使用memcache来保存
5)使用zend platform提供的解决方案
其中的1-4都是通过改用可以跨机的储存机制,再使用session_set_save_handler()来实现,5是zend公司的商业产品(不过据之前在使用的同事反映,效果不太满意),以上的方案,各有利弊,不在本文讨论范围
无论是用memcache,还是db,nfs,其原理是一样的,都是通过session_set_save_handler函数来改变默认的处理方式,通过指定回调函数来自定义处理,可以参考手册的session_set_save_handler()函数部分,有例子,比较容易明白
以下是一些我在使用memcache来实现时的一些记录:
1)使用类来实现时,各回调函数都定义为静态方法,在类的构造中使用session_set_save_handler注册回调函数, 如:
session_set_save_handler(
array('memSession', 'open'),
array('memSession', 'close'),
array('memSession', 'read'),
array('memSession', 'write'),
array('memSession', 'destroy'),
array('memSession', 'gc')
);
memSession为类名,要使用session,则先new memSession,再session_start();
2)生存期和垃圾回收
memCache的set命令有生存期,即使用set命令添加值时,可加上lifetime,此时间可以作为session的生存期,用户在此时间内没有动作,则会失效,但有动作则不会失效(因为每一个脚本结束时,都会执行write和close,此时lifetime就会被更新了),当然,如果使用 cookie传递SID,则控制SESSION生存期可以用:ini_set('session.cookie_lifetime',time)来设定, 这其实是控制cookie的有效时间,如果session赖以生存的cookie消失了,当然session也就活不了,使用 cookie_lifetime来控制的话,无论有无动作,都将在指定的时间后过时
gc是指垃圾回收,在session中是指清理过期的session数据,影响的参数有:
session.gc_maxlifetime 被视为垃圾前的生存期,超过此时间没有动作,数据会被清走
注意的是,gc不是每次启动会话都会被执行,而是由session.gc_probability 和 session.gc_divisor的比率决定的
结论:控制SESSION的生存期有几种方法
一是cookie_lifttime,这种方式无论有无动作,都会在指定时间内销毁
二是在read中根椐保存时间控制,此方法在有动作时时间会一直有效
三设定session.gc_probability 和 session.gc_divisor的比率为1(即每次会话都会启用gc),再设定gc.maxlifetime来指定生存期,此方法也是在用户有动作时时间一直有效
3)回调函数的执行时机
open 在运行session_start()时执行
read 在运行session_start()时执行,因为在session_start时,会去read当前session数据并写入$_SESSION变量
destroy 在运行session_destroy()时执行
close 在脚本执行完成或调用session_write_close() 或 session_destroy()时被执行,即在所有session操作完成后被执行
gc 执行概率由session.gc_probability 和 session.gc_divisor的值决定,时机是在open,read之后,即session_start会相继执行open,read和gc
write 此方法在脚本结束和使用session_write_close()强制提交SESSION数据时执行
结论:
session_start //执行open(启动会话),read(读取session数据至$_SESSION),gc(清理垃圾)
脚本中间所有对$_SESSION的操作均不会调用这些回调函数
session_destroy //执行destroy,销毁当前session(一般是删除相应的记录或文件),相应地,此回调函数销毁的只是session的数据,但此时
var_dump一下$_SESSION变量,仍然有值的,但此值不会在close后被write回去
session_write_close() //执行write和close,保存$_SESSION至存储,如不手工使用此方法,则会在脚本结束时被自动执行
清晰了以上信息,将对你清楚了解SESSION的工作原理有很大的帮助...
4)直接使用memcache作session处理
在我写了一系列的memcache来保存session的代码后,无意中发现,可以直接在php.ini中设定使用memcache作为session处理,而无须另外编码,方法是:
修改php.ini中的以下值
session.save_handler = memcache
session.save_path = 'tcp://host1:11211' #有多个时直接用","分隔即可
如果只想在特定的应用里使用memcache储存session,可以使用ini_set的方法对以上两个参数进行设定
要测试一下是否真正用上了memcache,可以先捕足到使用的PHPSESSID,再作为KEY用memcach去读一下,就清楚了
发表评论
-
通过Keepalived实现Redis Failover自动故障切换功能[实践分享]
2015-03-12 17:10 7422参考资料:http://patrick-tang.blog ... -
Redis学习手册(主从复制)
2015-03-12 17:05 7349一、Redis的Replication: ... -
redis 的两种持久化方式及原理
2015-03-12 16:52 63333Redis是一种高级key-value数据库。它跟memc ... -
Redis指令手册中文版
2014-08-08 17:09 957连接控制QUIT :退出,关 ... -
Redis服务的监控
2013-01-17 16:00 6722redis 监控工具安装配置http://blog.sin ... -
【汇总】redis
2012-04-16 13:51 1453http://bbs.chinaunix.net/thread ... -
memcache运用代码
2011-07-22 11:38 1422interface ICache { pub ... -
memcache 丢数据解决方案
2011-07-01 11:17 2701一小时以内数据变化都存放到memcached中,无论数据读取或 ... -
Memcached repcached同步
2011-06-10 14:10 2203#安装 wget http://downloads.sour ... -
memcached命中率问题
2011-06-09 21:14 2006http://www.iteye.com/topic/2256 ... -
php遍历memcache所有键值
2011-05-31 17:56 4378很有用的东东,PHP遍历MEMCACHE的所有键,在做管理me ... -
memcached全面剖析和深度剖析
2011-05-15 14:43 1686Memcached深度分析(原创) 2009年2月11日 ... -
【监控】netstat+telnet+m-top+phpmemcached
2011-03-31 22:01 30411G=1024*1024*1024=1073741824 by ... -
centos 下安装memcache配置
2010-09-21 15:01 7451为什么会有Memcache和memca ... -
Memcached深度分析----转新浪开发者博客
2009-07-11 22:36 1666http://blog.developers.api.sina ... -
多台memcache 研究
2009-07-11 13:07 4865第一种方法是通过设置特殊key前缀实现分布,基本可以实现mem ... -
Memcache分组和同步机制的实现--这不是memcache集群了么
2009-07-05 21:53 13075首先我们明确了解就是Memcache是一个简单、快速、高效的分 ... -
memcached全面剖析–5. memcached的应用和兼容程序
2009-07-05 21:31 1608memcached的连载终于要结束了。到上次为止,我们介绍了与 ... -
[推荐]memcached全面剖析–4. memcached的分布式算法:Consistent Hashing
2009-07-05 21:20 2522第2次 、 第3次 由前坂介绍了memcached的内部情况 ... -
【汇总】Memcache
2009-07-01 11:40 3718memcached全面剖析和深度剖析.rar ...
相关推荐
总的来说,"tomcat7集群session共享memcache依赖包1.8.3"提供了一种有效的方法,解决了在Tomcat7集群中Session共享的问题,通过Memcached作为中间件,实现了跨节点的Session一致性,提高了系统的可用性和用户体验。...
memcache提供了CAS(Compare and Swap)机制,可以在读取和更新session时避免数据冲突。 5. **优化与扩展**:根据需求,可能需要考虑session数据的序列化和反序列化策略,以及在服务器扩展时的负载均衡和故障恢复...
为了解决这个问题,我们可以引入外部存储系统,如memcache,来实现session的集中存储和共享。Memcache是一款高性能、分布式的内存对象缓存系统,它可以将数据存储在内存中,以提供快速的数据访问。在Tomcat8中,我们...
描述中提到,“用于tomcat6 使用memcache 实现session共享的jar包”,这表明这些jar文件是为Tomcat6设计的插件或库,目的是通过Memcache这个内存缓存系统来存储和管理Session数据。Memcache是一个高性能、分布式的...
标题中的“session共享之memcache Redis”指的是在Web开发中如何使用memcache和Redis来实现会话(session)数据的跨服务器共享。会话管理是Web应用中的关键部分,它允许用户在不同页面间保持状态,例如登录信息、...
在构建分布式系统时,Session共享是一个关键问题,特别是在使用多台服务器(如Tomcat)和负载均衡器(如Nginx)的环境中。本压缩包提供的资源是为了解决这个问题,通过集成Memcached来实现Session的集中式管理,从而...
这个压缩包"memcache共享session用到的jar"包含的是已经经过测试,兼容的Memcache客户端库和其他可能需要的依赖。使用这个包可以避免因版本不兼容导致的问题,直接集成到项目中即可开始使用Memcache进行session共享...
3. **memcached-session-manager-2.0.0.jar**:这是Memcached Session Manager的核心库,它负责处理session的存储、恢复和过期策略,使得Tomcat能够将session数据透明地存储在Memcache中。 4. **kryo-serializers-...
tomcat kryo memcache session序列化 msm-memcached-session-manager-1.8.2
这里我们关注的是如何通过Nginx、Tomcat6和Memcached实现集群中的session共享。这个压缩包“Nginx+tomcat6+memcache所需jar包”提供了实现这一目标所需的组件。 首先,Nginx是一个高性能的反向代理服务器,常用于...
通过memcache实现tomcat7的session共享,目前生产环境用的不多了,但自己某个小需求用到,版本冲突好几次,分享给大家,这3个包复制到tomcat的 lib目录下 还有两个包需要 maven引入自己的项目中 <!-- memcache ...
标题 "Memcache Session Manager Tomcat8.5.6" 指的是在Tomcat 8.5.6版本中使用Memcache作为会话管理器的一种配置。这种配置旨在提高Web应用在集群环境下的性能和可扩展性,通过将用户的会话数据存储在分布式缓存...
总结,通过memcache实现PHP的多服务器session共享,可以有效解决分布式系统中的用户状态同步问题,提高系统的可扩展性和稳定性。然而,这也需要开发者对memcache、PHP配置以及网络通信有深入的理解,以便在实际应用...
总结起来,这个架构结合了Nginx的负载均衡、Tomcat的Web应用处理、Memcache的高效缓存和Kryo的序列化技术,实现了高可用、高性能的Web服务,同时解决了session共享的问题。在实际部署时,还需要根据具体需求进行优化...
通过以上步骤,ASP Memcache 可以显著提升网站或应用程序的响应速度,尤其在需要处理大量用户session和频繁数据库操作的情况下。然而,要注意的是,Memcache 不适合存储持久化数据,因为一旦服务重启,所有缓存数据...
在构建高性能、高可用性的...总之,这个“tomcat7+nginx+memcached”程序包提供了一种高效、可靠的Web应用架构,通过Nginx实现负载均衡,借助Memcache实现跨服务器的Session共享,极大地提升了系统的可用性和扩展性。
本文实例讲述了PHP保存session到memcache服务器的方法。分享给大家供大家参考,具体如下: 传统的 session 是写入到服务器文件中,可以在 php.ini 中看出,清单如下 ...将 session 保存到 memcache
memcached提供了一个自定义的session处理器可以被用于存储用户session数据到memcached服务端,下面通过本文给大家介绍在php中设置session用memcache来存储的方法总结,对php session memcache相关知识感兴趣的朋友...
主要介绍了Zend Framework实现将session存储在memcache中的方法,结合实例形式分析了Zend Framework框架下将session存储在memcache的实现技巧,需要的朋友可以参考下