废话少说,先来看看保存session的4种方案 1.在web容器的内存中,最常见,最原始的,纯天然,无人工的。 2.跟上面第一种差不多,只是保存在文件里了,如果忽然down机,下次重启session还在。 3.通过java jdbc保存在数据库里面。 4.通过中央式缓存 memcached
废话少说,先来看看保存session的4种方案
1.在web容器的内存中,最常见,最原始的,纯天然,无人工的。
2.跟上面第一种差不多,只是保存在文件里了,如果忽然down机,下次重启session还在。
3.通过java jdbc保存在数据库里面。
4.通过中央式缓存 memcached 集中管理。
1、2就不讨论了,说一下3、4 各有优势
第3点的优势:每台机器连接相同的数据库 session 将集中被管理起来,不会在每个tomcat之间互相大量复制,减少系统的整个运行压力,另外,在持久化的过程中使用的是 org.apache.catalina.session.jdbcstore对象 tomcat 下 catalina.jar的一部分,不需要另外引入其他api,并且session数据一直保存在数据库中,而第4点 memcached 重启 里面的回话也就销毁,需要另外引入api,但是从执行效率上看大于第3种。
所以可以根据你的需要选择不同的方案。
查找了网上n多资料,都是互相抄袭并且非常严重!!连错的地方都一起抄过来,我为国人感到可耻!最后还是从一个日本blog上看见了一篇日志得到了启发。
查看地址:http://d.hatena.ne.jp/stdcall/20070102/1167688088
以下是测试程序。环境:tomcat5.5 / mysql ===
========================server.xml =============================
path=/test
reloadable=true
source=org.eclipse.jst.j2ee.server:test
backgroundprocessordelay=1 >
distributable=true
duplicates=-1
saveonrestart=true
maxactive=-1
maxactivesessions=0
minidleswap=-1
maxidleswap=-1
maxidlebackup=-1
maxinactiveinterval=-1
sessioncounter=-1 >
checkinterval=1
connectionurl=jdbc:mysql://172.16.2.211/test?user=root1&password=123456
drivername=com.mysql.jdbc.driver
sessionappcol=app_name
sessiondatacol=session_data
sessionidcol=session_id
sessionlastaccessedcol=last_access
sessionmaxinactivecol=max_inactive
sessiontable=tomcat_sessions
sessionvalidcol=valid_session />
========================mysql 建表语句 =============================
create table `tomcat_session` (
`session_id` varchar(100) not null,
`valid_session` char(1) not null,
`max_inactive` int(11) not null,
`last_access` bigint(20) not null,
`app_name` varchar(255) default null,
`session_data` mediumblob,
primary key (`session_id`),
key `kapp_name` (`app_name`)
) engine=innodb default charset=utf8;
=======================jsp 测试程序 =============================
insert title here
session id =
counter = ( counter == null )
? new integer(1) : new integer(counter.intvalue() + 1);
session.setattribute(counter,counter);
%>
counter =
譛