专栏名称: OSC开源社区
OSChina 开源中国 官方微信账号
目录
相关文章推荐
OSC开源社区  ·  工作写代码,放假写书,最后豆瓣评分9.1 ·  4 天前  
程序员的那些事  ·  重磅!Chrome ... ·  5 天前  
OSC开源社区  ·  BASIC编程语言共同发明人Thomas ... ·  1 周前  
51好读  ›  专栏  ›  OSC开源社区

基于 Redis 的 Session 共享示例

OSC开源社区  · 公众号  · 程序员  · 2016-12-24 08:46

正文

在单机情况下,Session可由部署在服务器上的Web容器来管理 (如Tomcat、JBoss)。

在负载均衡的集群环境下,负载均衡可能将请求分发到不同的服务器上去,在这种情况,需要将有状态的session统一管理起来。

本文将给出一个简单的示例,将session存放到Redis统一管理。因为只是一个示例,所以Nginx只用1台,Tomcat使用2台,Redis一个或者简单的主从。


环境准备


准备Redis

下载redis-3.2.3.tar.gz (请点击“阅读原文”获取下载链接)

解压缩redis



将解压缩后的redis文件名改成好记点的6379 (可以不重命名)。

然后使用 make && make install 完成安装。


安装成功之后,出现如下显示:


因为本版本使用的Redis版本是 3.2.3, 在这个版本中,有 protected mode 的属性(默认是yes),进入6379目录,修改redis.conf配置文件。从而,其它网段的程序可以去访问,否则可能会出现如下的错误。



修改后保存。


进入src目录,启动Redis服务


成功启动显示如下:


准备Tomcat

下载tomcat,并解压缩为两个tomcat,并修改各自server.xml中的端口,保证两者不冲突。

本示例中,tomcat_1的端口为8082


tomcat_2的端口为8083


准备Session-Manager

大家可以通过如下路径获取Session-Manager的jar包和相关的依赖包,包括common-pool2和Jedis。

https://pan.baidu.com/s/1geZVozx

下载好之后,我们首先将这三个jar包,放到Tomcat目录下的lib文件夹中。

配置 Context.xml,添加如下内容,具体的host和port由自己的环境决定。


然后准备一个项目,为了方便,我直接将测试的war中的文件替换了Tomcat_Home/webapps中的ROOT的内容。也可以通过tomcat自带的examples示例来测试session。

如:http://localhost:8082/examples/servlets/servlet/SessionExample

至此,两个测试的tomat就准备好了,并且已经配置了session管理,由redis来存储。接下来,我们就需要一个Nginx用于负载,配置两个tomcat的信息即可。

准备Nginx

下载Nginx,解压,然后进入Nginx的conf目录,修改nginx.conf文件内容,找到http的部分,添加upstream,就是我们上述提到的两个tomcat。


本文Nginx的端口为8899, 自己设定了一个。


至此Nginx, Tomcat, Session-Manager, Redis相关的环境就全部准备好了。

接下来,要做的就是启动Nginx, Tomcat, Redis,来看看 session是否存入到Redis中,自己的Web工程能不能正常运行等。


启动Nginx和Tomcat


进入NGINX_HOME/使用 nginx 命令启动Nginx服务器。


进入两个tomcat_1和tomcat_2,分别启动tomcat。登录自己在ROOT中放置的WEB工程,可以看到session在Redis中存储下来了。

通过Redis-Desktop Manager查看Redis中session的信息。

配置一个Redis从服务器

通过Redis-Desktop Manager查看Redis中session的信息。

为上面的6379主服务器配置一个从服务器6380。

在6380的redis.conf中指定 是6379的slave,如:


启动从服务器:


使用Redis-Desktop Manager

可以看到,主服务6379和从服务6380都包含session的相关信息。



推荐阅读

2016 年 CSS 库、框架和工具新生榜 TOP 50

2017 年你应该学习的编程语言、框架和工具

Google Go 语言从入门到应用必备开源项目

27 款 iOS 开源库,让你的开发溜到飞起

JavaScript 的开源功能插件和框架小集锦

点击“阅读原文”查看更多精彩内容