• Tomcat7基于Redis的Session共享实战一


    本文主要介绍如何使用redis对tomcat7的session进行托管。

    1、安装Redis
    redis安装比较简单,此处略过。

    2、配置两个Tomcat
    在本机上配置两个Tomcat,分别为tomcat7-8081、tomcat7-8082。

    编制两个index.jsp页面,分别放入tomcat7-8081webappsROOT、tomcat7-8082webappsROOT目录下,index.jsp页面内容如下:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>获取session id</title>
    </head>
    <body>
        Session Id : <%= request.getSession().getId() %>
    </body>
    </html>

    tomcat7-8081访问地址:http://localhost:8081,浏览显示内容:Session Id : A86BC413D12339380DD7B0079C50D9EB
    tomcat7-8082访问地址:http://localhost:8082,浏览显示内容:Session Id : A86BC413D12339380DD7B0079C50D9EB

    备注:在同一台服务器上配置多个Tomcat教程

    3、拷贝tomcat需要的jar
    将如下几个jar拷贝到${TOMCAT_HOME}/lib下

    tomcat-redis-session-manager-VERSION.jar 
    jedis-2.5.2.jar 
    commons-pool2-2.2.jar

    备注:jar已上传到博客园中,有需要的点击下载

    4、配置tomcat
    编辑${TOMCAT_HOME}/conf/context.xml,在context中加入

    <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
    <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
           host="localhost"
           port="6379"
           database="0"
           maxInactiveInterval="60" />

    其中host和port为redis的ip和端口

    至此配置完成,tomcat会使用redis来托管session。

    5、测试
    分别启动2个Tomcat,在终端看到了如下信息,表明redis的session manager初始化成功。

    ...
    十月 15, 2015 4:52:39 下午 com.radiadesign.catalina.session.RedisSessionManager startInternal
    信息: Attached to RedisSessionHandlerValve
    十月 15, 2015 4:52:39 下午 com.radiadesign.catalina.session.RedisSessionManager initializeSerializer
    信息: Attempting to use serializer :com.radiadesign.catalina.session.JavaSerializer
    十月 15, 2015 4:52:39 下午 com.radiadesign.catalina.session.RedisSessionManager startInternal
    信息: Will expire sessions after 1800 seconds
    十月 15, 2015 4:52:39 下午 org.apache.catalina.startup.HostConfig deployDirectory
    信息: Deployment of web application directory E:WorkFolderTempRedis-Sessionapache-tomcat1-8080webappsmanag
    十月 15, 2015 4:52:39 下午 org.apache.catalina.startup.HostConfig deployDirectory
    信息: Deploying web application directory E:WorkFolderTempRedis-Sessionapache-tomcat1-8080webappsROOT
    十月 15, 2015 4:52:39 下午 org.apache.catalina.startup.TldConfig execute
    信息: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a co
    十月 15, 2015 4:52:39 下午 com.radiadesign.catalina.session.RedisSessionManager startInternal
    信息: Attached to RedisSessionHandlerValve
    十月 15, 2015 4:52:39 下午 com.radiadesign.catalina.session.RedisSessionManager initializeSerializer
    信息: Attempting to use serializer :com.radiadesign.catalina.session.JavaSerializer
    十月 15, 2015 4:52:39 下午 com.radiadesign.catalina.session.RedisSessionManager startInternal
    信息: Will expire sessions after 1800 seconds
    ...

    打开浏览器,输入http://localhost:8081回车,
    打开浏览器,输入http://localhost:8082回车

    获取的SESSIONID是同一个,说明成功了,其中D5E4019A04709CD68F94378211DA1B60就是SESSIONID

    启动redis自身的客户端:redis-cli.exe -h 127.0.0.1 -p 6379
    执行"keys *",会看到SESSIONID:D5E4019A04709CD68F94378211DA1B60;
    执行"get D5E4019A04709CD68F94378211DA1B60",得到SESSIONID的值。


    经测试,只要redis不重启,用户session就不会丢失。虽然session保存到了redis中,但是如果redis挂掉,session也会丢失。为了解决此问题,可对redis进行集群。
    注意:放到redis中的对象必须为可序列化对象。因此,在编程过程中,放置的session对象必须实现serialiable接口。

  • 相关阅读:
    valgrind使用手册
    [转]windows server 2008 多用户远程登录设置
    ios控件学习 IB实现
    把java变成exe
    python 函数 值传递
    java 经验
    python list 去除重复
    xcode 4.2 基础
    mac 使用
    object c 基础语法
  • 原文地址:https://www.cnblogs.com/linjiqin/p/5761281.html
Copyright © 2020-2023  润新知