只是回顾旧的 SO 帖子春季会议 关键宝石火支持,所以很抱歉您的问题从未得到及时答复。
简而言之,春季会议使用UUID http://docs.oracle.com/javase/8/docs/api/java/util/UUID.html类来生成“唯一”会话 ID。例如,参见here https://github.com/spring-projects/spring-session/blob/1.2.0.RELEASE/spring-session/src/main/java/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.java#L380,或者更一般地说,here https://github.com/spring-projects/spring-session/blob/1.2.0.RELEASE/spring-session/src/main/java/org/springframework/session/MapSession.java#L66.
NOTE: Spring会话数据Redis支持使用/包装 https://github.com/spring-projects/spring-session/blob/1.2.0.RELEASE/spring-session/src/main/java/org/springframework/session/data/redis/RedisOperationsSessionRepository.java#L682 the MapSession
默认情况下,在 Redis 中存储会话状态的类。
似乎有很多关于有效性,或者说独特性UUID
跨集群中的 JVM。这特别是一个 https://community.oracle.com/thread/1326404?tstart=0虽然已经过时,但引起了我的注意,因为它源自 Oracle Java 社区论坛。
但是,请记住,这是您的应用程序使用的春季会议最终确定会话 ID 是否唯一;即,它不依赖于 GemFire 集群中的节点数量,因为各个 GemFire 节点不会生成会话 ID(使用春季会议 are).
因此,如果只有 1 个应用程序(在微服务世界中可能不太可能)存在春季会议在使用中,那么 UUID 在概率上保证是唯一的。即便如此,基于可用,似乎不太可能有 2 个或更多使用 Spring Session 的“应用程序”节点生成冲突的 ID(尽管,(几乎?)一切皆有可能;-)。
不过,我想如果这是最重要的关注/重要性,那么遵循美丽的传统Spring,这将是一件简单的事情extend the GemFireOperationsSessionRepository
并覆盖创建会话() https://github.com/spring-projects/spring-session/blob/1.2.0.RELEASE/spring-session/src/main/java/org/springframework/session/data/gemfire/GemFireOperationsSessionRepository.java#L110-L112方法,调用适当的GemFireSession
构造函数 https://github.com/spring-projects/spring-session/blob/1.2.0.RELEASE/spring-session/src/main/java/org/springframework/session/data/gemfire/AbstractGemFireOperationsSessionRepository.java#L384-L388传递所需的会话 ID。
然而,在所有情况下(GemFire、Redis 等),会话 ID 唯一性问题与底层后备数据存储无关。
希望这可以帮助...
Cheers!