Session共享
相关参考英语文档:https://github.com/xetorthio/jedis
感谢!
-为什么要实现Session共享?
-Session主要是存储用户信息的,每个用户都会有一个对应的Sessionid,那么在Nginx集群下,有可能用户会因为服务器升级等问题而需要登录到其他服务器,登录其他服务器时,因为服务器并没有用户的信息,就会需要需要重新生成用户信息,所以我们需要实现Session共享,让每一台服务器都能访问知道Session。也不用重复生成啦。
Session相关信息:https://blog.csdn.net/hjc1984117/article/details/53995816
感谢!
具体实现
-我们将Session放到Redis里面,用户登录的时候访问到服务器之后,不管是哪台服务器都会去找这一个共同的Redis,
-1. Tomcat里面的lib文件中放三个jar包
.jar文件中就是存在Session管理器
-2. 然后再修改一下conf文件夹中的context.xml
-3. 测试:在每个Tomcat中的/webapps/ROOT文件夹中添加add.jsp和
-get.jsp,
验证
-1.最后进到每个服务器的tomcat/bin目录中启动tomcat:
./shutdown.sh
./startup.sh
-2. 然后在浏览器输入ip:8080进行验证,页面会出现相应jsp页面数据,
-验证好之后只能说明我们的服务器的Session管理器配好啦,
-3. Session共享的验证我们则需要正式的模拟用户从域名进行访问,
-查看是否有服务器的跳转。例如:
-域名.cn.get.jsp
页面正常情况会在几台服务器中进行跳转。
-4. 登录Redis输入keys * 查看是否有Session的id
nginx的权重设置在 /usr/local/nginx/conf/.conf(待写)
-注意:实现Session共享每个Tomcat服务器中都需要做以上操作。
补充
-1. 三个jar包可以打包成tar,用bitvise远程连接工具进行文件的上传,三个jar包
存放在Tomcat中的位置 是tomcat中的lib文件下;
-2. context.xml文件修改内容:
在文件最后</Context>前输入:
<Valve className="com.bluejeans.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.bluejeans.tomcat.redissessions.RedisSessionManager"
host="192.168.154.130"
port="6379"
database="0"
maxInactiveInterval="60"
sessionPersistPolicies="SAVE_ON_CHANGE"
/>
get.jsp具体内容:
<%@ page contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<html>
<body>
<h1>132 Get Session</h1>
<%
Object val=session.getAttribute("demo");
out.println("132 get Session OK!"+ val);
%>
</body>
</html>
add.jsp:
<%@ page contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<html>
<body>
<h1>132 Save Session</h1>
<%
session.setAttribute("demo", "Hello Redis!");
out.println("132 add Session OK!");
%>
</body>
</html>
-不同服务器要修改的Context主要是主机ip就行
-3.为了区别每台服务器在浏览器的显示,则在复制app.jsp和get.jsp后,也在里面修改
成具体的主机后缀,
-复制粘贴技巧:将几个文件进行特定文件tar打包,例如:
tar -cvzf redis-session.tar.gz lib/jedis-2.5.2.jar lib/commons-pool2-2.2.jar/ lib/tomcat-redis-session-manager-2.0.0.jar conf/context.xml webapps/ROOT/add.jsp webapps/ROOT/get.jsp
解压:tar -zxvf redis-session.tar.gz
解压会按照我们打包时的特定路径进行文件的解压粘贴
面试问题:
-你们的项目有什么特点:
我们的项目解决了高并发问题,利用的是Nginx反向代理集群解决的
-那你们的Session是怎么处理的呢?
我们用Redis进行Session的共享了,数据是放在mysql里面的。
使用 Redis 提升软件性能
在一般的商城项目中,类似商品热销、推荐的排序,用户经常访问的一些数据放在Redis里面。
以致于提高软件的高性能。