redis实现session持久化

一般的系统都会把session保存在浏览器内存中,当session过期时间到了之后,session就没了,此时如果继续访问系统或session没失效时关闭浏览器,需要用户再次登录,换句话说就是session没有进行持久化。如果需要持久化session,有2种比较常见的做法:1、使用tomcat自带的持久化策略,保存session;2、将session保存到分布式缓存系统。

一、tomcat实现session持久化

tomcat有自带持久化session的功能,需在context.xml文件做修改,在<Context>节点下添加如下<Manager>节点

<Manager className="org.apache.catalina.session.PersistentManager" >

    debug=0

    saveOnRestart="true"

    maxActiveSession="-1"

    minIdleSwap="-1"

    maxIdleSwap="-1"

    maxIdleBackup="-1"

    <Store className="org.apache.catalina.session.FileStore" directory="../session" />

   //directory表示保存session的目录

</Manager>

之后只需在登录成功时,向客户端发送cookie,并设置jsessionId,此后每次浏览器都会携带该sessionId,服务器端解析到sessionId后,到磁盘中找对应sessionId的session对象即可。

二、redis实现session持久化

1、安装redis;

2、下载jedis和tomcat-redis-session相关jar包(我下载的jar包是jedis-2.0.0.jar和tomcat-redis-session-manager-1.2-tomcat-7-java-7.jar);

3、将下载好的jar包放到$TOMCAT_HOME/lib目录;

4、修改tomcat的context.xml文件,在<Context>标签内增加如下配置:

    <Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve"/>

    <Manager className="com.radiadesign.catalina.session.RedisSessionManager" 

    database="0" 

    host="redis服务器ip" 

    maxInactiveInterval="60" 

    port="redis端口"/>

5、启动redis服务器(session保存到redis是,默认的过期时间是30min);

6、测试。登录业务系统后,往客户端写cookie,包含sessionId,关闭浏览器,使用HttpSession session = request.getSession();代码,观察session对象是否为空;

三、两种方式对比

1、redis方式更易扩展;

2、可以使用redis的读写分离个集群功能更加高效读写数据。




你可能感兴趣的:(redis实现session持久化)