这篇文章主要介绍了redission-tomcat快速实现从单机部署到多机部署详解,本文介绍一个基于redis的tomcat session管理开源项目:redission-tomcat,可无代码侵入式地快速实现session共享,需要的朋友可以参考下

前言

一些项目初期出于简单快速,都是做单机开发与部署,但是随着业务的扩展或对可用性要求的提高,单机环境已不需求。单机部署往多机部署切换,其中可能存在的一个重要环节就是session的共享(如果一开始就是基于token的认证则可忽略)。本文介绍一个基于redis的tomcat session管理开源项目:redission-tomcat,可无代码侵入式地快速实现session共享。

简介

redisson是与jedis类似的一个redis客户端,其功能比jedis要更丰富一些。redission-tomcat是一个基于redis的tomcat session管理器项目,项目地址。相比于其它实现,该项目的存储更为高效,写操作也更为优化。每一个session参数是在调用HttpSession.setAttribute时写入redis的,其它方案却一般是每次都将整个session进行序列化后写入。

使用

1.将redisson-all-3.11.0.jar,redisson-tomcat-8-3.11.0.jar(针对tomcat8,其它版本可在上述项目地址页面找到下载链接)两个jar包下载放到tomcat的lib目录下。

2.在tomcat conf目录下的context.xml文件中添加如下配置

<Manager className="org.redisson.tomcat.RedissonSessionManager"
configPath="${catalina.base}/conf/redisson.conf" 
readMode="MEMORY" updateMode="AFTER_REQUEST" broadcastSessionEvents="false"/>

其中

    configPath:指向Redisson的json或yaml格式的配置文件,第3步中给出。 readMode:session属性的读取模式。可取值 1. MEMORY, 该模式会将session属性同时保存到本地tomcat session与redis中,后续的session更新通过redis事件传播到本地tomcat session;2. REDIS,只将session属性保存到redis中。默认为REDIS。 updateMode:session属性的更新模式。可取值 1. DEFAULT,session属性只通过setAttribute方法保存到redis中;2. AFTER_REQUEST,在每次请求之后,将所有session属性保存至redis。默认为DEFAULT。 broadcastSessionEvents:如果设置为true,则sessionCreated与sessionDestroyed事件将会被广播到所有tomcat实例,并使所有注册的HttpSessionListeners监听器被触发。默认为false。

3.在tomcat conf目录下新增配置文件redisson.conf,内容如下

{
"singleServerConfig":{
"idleConnectionTimeout":10000,
"connectTimeout":10000,
"timeout":3000,
"retryAttempts":3,
"retryInterval":1500,
"password":"123456",
"subscriptionsPerConnection":5,
"clientName":null,
"address": "redis://127.0.0.1:6379",
"subscriptionConnectionMinimumIdleSize":1,
"subscriptionConnectionPoolSize":50,
"connectionMinimumIdleSize":24,
"connectionPoolSize":64,
"database":0,
"dnsMonitoringInterval":5000
},
"threads":16,
"nettyThreads":32,
"codec":{
"class":"org.redisson.codec.FstCodec"
},
"transportMode":"NIO"
}

以上为单机模式redis环境配置,其中password,address修改为自己的值。如果是集群模式,则配置文件为

{
"sentinelServersConfig":{
"idleConnectionTimeout":10000,
"connectTimeout":10000,
"timeout":3000,
"retryAttempts":3,
"retryInterval":1500,
"failedSlaveReconnectionInterval":3000,
"failedSlaveCheckInterval":60000,
"password":null,
"subscriptionsPerConnection":5,
"clientName":null,
"loadBalancer":{
"class":"org.redisson.connection.balancer.RoundRobinLoadBalancer"
},
"subscriptionConnectionMinimumIdleSize":1,
"subscriptionConnectionPoolSize":50,
"slaveConnectionMinimumIdleSize":24,
"slaveConnectionPoolSize":64,
"masterConnectionMinimumIdleSize":24,
"masterConnectionPoolSize":64,
"readMode":"SLAVE",
"subscriptionMode":"SLAVE",
"sentinelAddresses":[
"redis://127.0.0.1:26379",
"redis://127.0.0.1:26389"
],
"masterName":"mymaster",
"database":0
},
"threads":16,
"nettyThreads":32,
"codec":{
"class":"org.redisson.codec.FstCodec"
},
"transportMode":"NIO"
}

我们可以使用nginx来实现负载均衡,参考配置

upstream cnserver{
server 127.0.0.1:8080 weight=2 fail_timeout=10s max_fails=1;
server 127.0.0.1:8081 weight=2 fail_timeout=10s max_fails=1;
}
server {
listen 80;
server_name localhost;
index index.html index.htm;
location /rest/ {
index index.html;
proxy_pass http://cnserver/rest/;
}
}

以上即为使用redisson-tomcat来实现单机部署到多机部署的所有配置。

总结

技术架构都是随着业务的发展而不断演进。在业务发展初期,用户量、业务复杂度都相对较低,为了实现快速上线验证,往往采用简单单一的架构。许多项目可能还没来得及进行架构演进升级就GG了,而有幸继续成长的项目必然会随着业务的扩张不断优化与升级。

本文介绍的redisson-tomcat可帮助单机项目快速切换到多机支持,当然只是在session管理环节。如果涉及到其它如文件上传,定时任务等分布式支持,则要另做相应调整了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持爱安网。

最新资讯
半年疯狂吸金16亿美金,合成生物学为什么这么火?

半年疯狂吸金16亿美金

未来有多远,合成生物学的市场化会在什么时候到来,这些问
亚马逊计划推出全新实体超市品牌 将于2020年开业

亚马逊计划推出全新实

亚马逊计划推出一个不同于两年前收购的全食超市全新超
谷歌与Ascension达成云计算合作协议 获大量医疗数据

谷歌与Ascension达成

谷歌发表声明称,公司已经与Ascension签下云计算合约,Asc
“刷脸”时代下,人脸信息数据该如何安放?

“刷脸”时代下,人脸信

在这场利益与道德的审判里,个人的隐私安全至关重要。
印度三季度手机市场:中国品牌占七成份额 小米第一

印度三季度手机市场:中

IDC日前发布了印度智能手机市场三季度报告,报告显示,三
滴滴顺风车解困之道:回归共享经济本源

滴滴顺风车解困之道:回

事实上,目前共享经济概念在资本市场不再受宠。
最新文章
Ubuntu18 给terminal改个漂亮的命令行提示符的方法

Ubuntu18 给terminal

这篇文章主要介绍了Ubuntu18 给terminal改个漂亮的命
Linux下Docker及portainer相关配置方法

Linux下Docker及porta

本文以CentOS 7为例,安装docker CE版本,docker有两种版
vmware workstation安装windows server 2019(图文教程)

vmware workstation安

这篇文章主要介绍了vmware workstation安装windows se
protobuf简单介绍和ubuntu 16.04环境下安装教程

protobuf简单介绍和ub

protobuf是谷歌的开源序列化协议框架,结构类似于XML,JSO
ansible删除目录下所有内容的方法

ansible删除目录下所

这篇文章主要介绍了ansible删除目录下所有内容的方法,
基于 ZooKeeper 搭建 Hadoop 高可用集群 的教程图解

基于 ZooKeeper 搭建

Hadoop 高可用 (High Availability) 分为 HDFS 高可用