负载均衡NGINX+redis实现SESSION共享
2016-12-11 19:39
344 查看
网上的例子,没搜索到JAVA的,看到C#什么的,感觉挺奇怪的,就正好自己借助别人的思路用JAVA实现
SESSION共享实现的方法,我选择了COOKIE,当然其他方法比如说,中间服务器,或者制定一个SESSION规则,将哪个SEESION分配到哪个服务器。选择COOKIE实现,最主要是方便,同时也有我现在做的是ERP系统,对于并发没有太多要求。
NGINX的负载均衡,去官网http://nginx.org/ 下载,现在对于很多开源JAR包或者工具下载,建议去官网,因为有最新的文档和介绍,比国内网盘存的东西,认识更加清晰
负载均衡最基本的设置,在nginx.conf里面设置,我sheng'l
这是没有设置会话固定,设置了的话,SESSION的测试很难测试了。
Redis是Key,Value的数据库,当成一个数据库就好了,主要是速度快。并且容易装和使用
JAVA代码实现的核心就是判断是否已经有COOKIE的SESSIONID值,没有COOKIE中的值就SET进去,讲的很很粗糙,具体测试代码如下,测一下就很明白了。
info.java
index.jsp
SESSION共享实现的方法,我选择了COOKIE,当然其他方法比如说,中间服务器,或者制定一个SESSION规则,将哪个SEESION分配到哪个服务器。选择COOKIE实现,最主要是方便,同时也有我现在做的是ERP系统,对于并发没有太多要求。
NGINX的负载均衡,去官网http://nginx.org/ 下载,现在对于很多开源JAR包或者工具下载,建议去官网,因为有最新的文档和介绍,比国内网盘存的东西,认识更加清晰
负载均衡最基本的设置,在nginx.conf里面设置,我sheng'l
upstream mytomcats { server 127.0.0.1:8080; server 127.0.0.1:8081; server 127.0.0.1:8082; }
server { listen 8088; server_name localhost;shengl
........... }
这是没有设置会话固定,设置了的话,SESSION的测试很难测试了。
Redis是Key,Value的数据库,当成一个数据库就好了,主要是速度快。并且容易装和使用
JAVA代码实现的核心就是判断是否已经有COOKIE的SESSIONID值,没有COOKIE中的值就SET进去,讲的很很粗糙,具体测试代码如下,测一下就很明白了。
info.java
package htd; import java.io.IOException; import java.util.Set; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import redis.clients.jedis.Jedis; /** * Servlet implementation class hzm */ public class info extends HttpServlet { private static final long serialVersionUID = 1L; /** * Default constructor. */ public info() { // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub Jedis jedis = new Jedis("localhost"); String sessionId=null; //判断COOKIE是否存了SessionId Cookie[] cookeArray=request.getCookies(); for(Cookie cookie:cookeArray){ if(cookie.getName().equals("sessionId")){ System.out.println("找到了"+sessionId); sessionId=cookie.getValue(); } } if(sessionId==null){ System.out.println("找不到"); sessionId=request.getSession().getId(); } Set<String> test=jedis.zrange(sessionId, 0, 3); response.getWriter().write("{data:"+test.toString()+",seesionId:"+sessionId+"}"); response.getWriter().write("{place:"+request.getRealPath("\\")+"}"); jedis.close(); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }login.java
package htd; import java.io.IOException; import java.util.Set; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import redis.clients.jedis.Jedis; /** * Servlet implementation class login */ public class login extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public login() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub String sessionId=null; //判断COOKIE是否存了SessionId Cookie[] cookeArray=request.getCookies(); for(Cookie cookie:cookeArray){ if(cookie.getName().equals("sessionId")){ sessionId=cookie.getValue(); } } if(sessionId==null){ sessionId=request.getSession().getId(); Cookie cookie = new Cookie("sessionId",sessionId); cookie.setPath("/"); response.addCookie(cookie); } Jedis jedis = new Jedis("localhost"); Set<String> test=jedis.zrange(sessionId, 0, 3); if(test==null||test.isEmpty()){ System.out.println("set一次============="); String userName = request.getParameter("userName"); String password = request.getParameter("password"); String value = request.getParameter("value"); jedis.zadd(sessionId, 1,userName); jedis.zadd(sessionId, 2,password); jedis.zadd(sessionId, 3,value); test=jedis.zrange(sessionId, 0, 3); } response.getWriter().write(test.toString()+"sessionID:"+sessionId);; response.getWriter().write("{place:"+request.getRealPath("\\")+"}"); jedis.expire(sessionId,600); jedis.close(); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }web.xml配置SERVLET
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> <servlet> <servlet-name>info</servlet-name> <display-name>info</display-name> <description></description> <servlet-class>htd.info</servlet-class> </servlet> <servlet> <servlet-name>login</servlet-name> <display-name>login</display-name> <description></description> <servlet-class>htd.login</servlet-class> </servlet> <servlet-mapping> <servlet-name>info</servlet-name> <url-pattern>/info</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>login</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping> </web-app>
index.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <script src="/htd/resources/jquery-3.1.1.min.js"></script> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <script> function getCookie(name) { var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)"); if(arr=document.cookie.match(reg)) return unescape(arr[2]); else return null; } function getHt(){ $.ajax({ type: "GET", url: "/htd/info", success: function(data){ $("#t1").text("t1=="+data); } }); } getHt(); function submit(){ $.ajax({ type: "GET", url: "/htd/login", data: {userName:$('#userName').val(), password:$('#password').val(), value:$('#value').val()}, success: function(data){ $("#t2").text("t2=="+data); getHt(); } }); } </script> <body> <input id="userName" name="userName" id="userName" type="text">userId</input> <input id="password" name="password" id="password" type="text">password</input> <input id="value" name="value" id="value" type="text">value</input> <input id="but1" type="button" value="sub" onclick="javascript:submit();"/> <p id="t1"></p> <p id="t2"></p> </body> </html>前台测试结果
相关文章推荐
- springboot整合redis使用nginx实现负载均衡实现session共享
- Linuxz+tomcat+Nginx+Redis 实现负载均衡加Session共享
- nginx和tomcat实现反向代理、负载均衡和session共享
- Redis+Nginx+Tomcat实现Session共享
- Nginx+Tomcat搭建集群,Spring Session+Redis实现Session共享
- .Net 站点在Windows环境借助Nginx和Redis实现负载均衡系列(一)
- Nginx+ISS+Redis实现完美负载均衡
- 负载均衡之Nginx+tomcat+redis实现session共享的负载均衡
- nginx+tomcat+redis/Memcached实现集群 session共享
- tomcat、redis、nginx实现session共享
- SpringBoot+Redis+Nginx实现负载均衡以及Session缓存共享
- Windows环境下Nginx+Tomcat+Redis实现应用服务器集群负载均衡和Session共享
- Nginx+Tomcat+Redis实现应用服务器集群负载均衡和Session共享
- Nginx+Tomcat+Redis实现负载均衡与Session共享之四 — Nginx+Tomcat实现负载均衡
- IT忍者神龟之Redis+Tomcat+Nginx集群实现Session共享
- 集群与负载均衡系列——nginx ip_hash或redis实现共享session(2)
- .Net 站点在Windows环境借助Nginx和Redis实现负载均衡系列(三)
- 负载均衡之Nginx+tomcat+redis实现session共享的负载均衡
- 119 Nginx和Tomcat负载均衡实现session共享
- .Net 站点在Windows环境借助Nginx和Redis实现负载均衡系列(四)