1. 集群环境下的管理HTTPSSession所遇到的问题

java 集群 session 共享 集群模式下管理session_Redis

 

 一台服务器对应这个一个session对象,无法在另外一个服务器互通

解决方法:

       1. Session 的 Replication(复制)将当前服务器中使用的session全部复制到其他服务器上

           缺陷:Session数据冗余 浪费内存资源      

        

java 集群 session 共享 集群模式下管理session_java 集群 session 共享_02

 

 


           缺陷:存在单节点故障,容易操作数据丢失

       

java 集群 session 共享 集群模式下管理session_Redis_03

 

 

       3. Cookie的保存状态

           缺陷:也就时Cookie的缺点:存储数据量小,浏览器关闭cookie消失,数据暴露不安全,cookie存储中文数据必须要额外处理

     

java 集群 session 共享 集群模式下管理session_redis_04

 

 

       4. 通过redis 或者Memcahe等分布式缓存集中管理Session

         

java 集群 session 共享 集群模式下管理session_序列化_05

 

 

具体的思路:


       Session存redis中因为要跨网络。session需要实现序列化 key = sessionId value=session

       Cookie = jsessionid

       Jedis.get(“jsessionid”) ===session

通过Redis 集中管理session的开发步骤:

   

java 集群 session 共享 集群模式下管理session_序列化_06

java 集群 session 共享 集群模式下管理session_java 集群 session 共享_07

1、在tomcat的lib目录中导入
        tomcat-redis-session-manager-1.2-tomcat-6.jar
        jedis-2.0.0.jar
        commons-pool-1.6
2、在tomcat的conf目录中修改context.xml配置文件
    <Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
       <Manager className="com.radiadesign.catalina.session.RedisSessionManager"
                                   host="192.168.1.105"
                                   port="6379"
                                   maxInactiveInterval="60"/>

配置

java 集群 session 共享 集群模式下管理session_序列化_08

java中的实体类需要实现序列化接口

  注意:实现序列化的目的不仅仅是将对象写入到文件中更多的是可以进行对象的网络传输所谓的复制session就是通过一个流

将session传过来session中的对象也要传过来,所以session中存储的对象要实现序列化,而包装类型已经实现了系列化

网络中传输实体的方式

 优点:序列化,效率高,序列化后传输的是二进的内容  基于传输层 (内网, tcp ,局域网)

 JSON:传输的是字符串                                                  基于应用层 http 互联网

 与mybatis日志系统的集成

 

redis的分片

 1. 为什么要分片?

       例如:将1000万的数据量拆分成 10个100万的数据量 使用10个redis服务器进行处理 这个

        是分而治之的思想可以提高查询效率。

java 集群 session 共享 集群模式下管理session_redis_09

 


 

 

 

 2. 怎样实现分别片

 

 

     Redis2.x 通过程序员自己实现  (客户端的分片)

 

支持分片的特性 (又叫服务器分片)

 3. 如何知道数据对应哪个redis进行存储

 

 

redis  有几个redis就对几取模

 

java 集群 session 共享 集群模式下管理session_Redis_10

 


 

Redis分片的开发步骤

java 集群 session 共享 集群模式下管理session_Redis_11

 


 

 

 

redis3.x的特性

   特点:1.支持sharding 支持master-slaver

           2.支持auto failover(自动故障切换),    如果从节点发现主节点宕机 那么会自动称为主节点

 

注意:Redis2 与redis3 只在集群方面有区别其他没有区别

 

java 集群 session 共享 集群模式下管理session_redis_12

 


 

 

Redis充当web缓存的概念

         

java 集群 session 共享 集群模式下管理session_Redis_13

 


 

Redis中key的设计

1、查询有几种情况?

       1. 通过主键查询   id

       2 .通过其他条件查询    sql

 2. key 的设计

       

java 集群 session 共享 集群模式下管理session_Redis_14

 

 3. redis的副本集

        为什么需要副本集:放置单节点故障

        

java 集群 session 共享 集群模式下管理session_序列化_15

 

 Redis副本集的架构

       

java 集群 session 共享 集群模式下管理session_java 集群 session 共享_16

 


Redis 副本集的开发步骤:

    1. 复制redis.conf 的配置文件  一份为主一份为从  修改端口号port
     在从的配置文件中添加

slaveof  <masterip> <masterport>

java 集群 session 共享 集群模式下管理session_redis_17