笔试 新网科技

 

8.解决session 问题

https://blog.csdn.net/u012383839/article/details/79756368

 

1session 的复制问题,session的配置文件的问题:

具体的配置的问题:

<cluster classname="org.apache.cataliine.ha.tcp.Simple"  chanbekSendOption=''8'>

<!-- 第1步:修改server.xml,在Host节点下添加如下Cluster节点 -->
<!-- 用于Session复制 -->
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">
    <Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true" />
    <Channel className="org.apache.catalina.tribes.group.GroupChannel">
        <Membership className="org.apache.catalina.tribes.membership.McastService" address="228.0.0.4" 
                    port="45564" frequency="500" dropTime="3000" />
        <!-- 这里如果启动出现异常,则可以尝试把address中的"auto"改为"localhost" -->
        <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="auto" port="4000" 
                  autoBind="100" selectorTimeout="5000" maxThreads="6" />
        <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
            <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" />
        </Sender>
        <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector" />
        <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor" />
    </Channel>
    <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter="" />
    <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve" />
    <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" tempDir="/tmp/war-temp/" 
              deployDir="/tmp/war-deploy/" watchDir="/tmp/war-listen/" watchEnabled="false" />
    <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener" />
</Cluster>
 
<!-- 第2步:在web.xml中添加如下节点 -->
<!-- 用于Session复制 -->
<distributable/>

最终的tomcat的log中可能会打印如下的信息:

 

3.方案2:使用第三方的(个人的)基于tomact实现的session 管理的

这里的github 上的tomcat -redis -manager来实现。

项目地址:http://github.com/jcoleman/tomcat-redis-session-manager

 

方案3: 使用spring session  实现

spring session 提供了多种方式来存储的session信息,包括redis .mongo,gemfile,hazelcast,jdbc等。这里使用 redis 来举例说明:

首先进行依赖添加,然后惊醒配置即可。

 

4.1 添加依赖

compile "org.springframework.session:spring-session-data-redis:1.3.2.RELEASE"

注意:当引入上述依赖包时,还会引入如下依赖:

org.apache.commons:commons-pool2:2.4.2

org.springframework.data:spring-data-redis:1.7.10.RELEASE

org.springframework.session:spring-session:1.3.2.RELEASE

redis.clients:jedis:2.8.1

 

项目中原来使用了Redis作为Spring Cache的实现,当时使用的spring-data-redis是1.4.2.RELEASE版本,现在使用1.7.10.RELEASE版本后,需要把cacheManager这个Bean做如下调整:

 

项目中原来使用了redis 作为sprin cache 的实现,当时的使用的spring-data-redis s是1.4.2 release 版本,实现使用的1.7.0 relsese 版本后,需要把cacheManager这个bean做

如下调整:

<bean id="cacheMangae" class="org.springframeworkdata.redis.cache.rediscacheManger"

      c:templte-ref="redisTemplate"/>

 

<!--- 调整后-->

<bean  id="cacheManager"  class="org.springframeworkdata.redis.cache.rediscacheManger"

   c:redisOperations-ref="redisTemplate">

</bean>

 

4.2    进行的spring session 配置

<!--

   第1不得,在spring配置的文件中添加的如下的bean,

   以后的在web.xml 中配置的session 超时时间的就无效了,如果的需要制定的

session 超时时间,则使用的:maxInactiveIntervalInSeconds

-->

 

这里怎么没有redis 连接配置,请看的redisHttpSessionConfiguration 的如下代码:

@bean

public redisTemplate<Object,object> sessionRedisTemplate(

RedisConnectionFactory connectionFactory){

redisTemplate<Object,Object> template=new RedisTemplate<Object,Object>;

template.seKeySerializer(new StringRedisserializeer());

template.setHashkeySerializer();

 

if(this.defaultRedisserviazlier!=null){

   template.setConnectionFactory(connectionFactory);

  return   template;

 

}

 

 

项目中注入的jedisConnectionFactory bean 如下:

<bean  id="jedisconnectionFactory"  class="org.springframe.data.redis.connection.redis.conection"

   P:host-name="${redis,hostname}"

    p:port="${redis.port}"

    p:database="${redis.database}"

   p:poolConfig-ref="redispoolconfig"

   p:use-pool="${redis.usepool}">

>

 

 

 

所以,如果你项目中从来没有的使用过的redis ,也可以使用如下配置:

<bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration"/>
<!-- 
    Jdeis连接工厂Bean 
    注意:这种方式没有使用连接池,生产环境下务必需要使用连接池 
-->
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
    p:host-name="192.168.1.233" p:port="6379" p:database="15" p:usePool="false">
</bean>

 

下面的进行过滤器的配置:

<!-- 第2步:在web.xml中添加如下过滤器 注意:此过滤器必须放在其他过滤器之前-->
<filter>
    <filter-name>springSessionRepositoryFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
    <filter-name>springSessionRepositoryFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

 

5。方案对比

针对上述的3中的方案:  以下是个人见解:

方案1: 使用的tomcat 内置的session复制的方案,           优点 :   内置

     simpleTcpCluster                                                           缺点: 只是适合的tomcat 小集群,不适合的

                                                                                                      大集群,因为session复制的是all to all 的方式。

 

方案2:                                                                                   优点: 已经实现了对tomcat 的支持

使用的第三方基于的tomcat 的实现的session 管理的          缺点: 第三方的支持的,支持力度不够,

tomcat-session-manager

 

方案:  使用spring session 实现                                        优点:不依赖于特定容器,官方支持

 基于redis 存储实现

建议使用的spring session 来实现的session 共享更加好用。

 

 

9.web项目如何优化:

一。压缩的浏览器段,分多个方面:

1.压缩源码和图片和图片

js  文件源代码的尅采用混淆的压缩的方式,CSS的方式的

进行普通压缩的JPG的方式可以根据的具体的质量的来研所的为50%,

到70%.PNG 可以采用的一些开源的压缩软件的来压缩,比如的去掉

一些PNG的格式的信息。

 

2.选择合适的图片的格式:

如果图片颜色的较多的就是用的JPG的格式,如果图片颜色较少的

就使用PNG格式,如果能够的通过服务器段来判断的浏览器支持的

webp,那么久使用webP和SVG 格式。

 

3。合并静态资源的

包括的CSS,js 和小图片减少的HTTP的请求。

 

4.开启的服务端的Gzip的压缩

 

5.使用cdn 的

或者的是公开哭的第三发过的低通的静态资源的比如Jquery, 

normalize.css.   一方面的增加并发下载量,领一刚面

 

6。延长静态资源的缓存时间

这样的,频繁的访问的网站的访客的就能够的更快的访问。

不过的,这里的是通过的修改了文件的方式,确保的在资源的更新的

时候,用户会拉取到的最新的内容。

 

7.把CSS放在的页面的头部,把javasscrput 放在页面的

底部

 

 

https://blog.csdn.net/qq_39871740/article/details/79721149

 

https://blog.csdn.net/fuyifang/column/info/webxingneng

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

执于代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值