spring 会话冲突会话
spring session collision sessions
在 spring 会话中,我们有两个应用程序使用相同的 Redis 服务器,因此有时我们会遇到无法序列化的 ClassNotFoundException,因为应用程序试图序列化由不同的服务器创建的会话应用程序。不过,有时这两种服务都会开始出现此错误。
为了缓解这个问题,我们确定使用 redisNamespace
。但是假设我们有 2 项服务并且只能更新一项服务。如果我们将 redisNamespace
添加到一项服务中,这两种服务上的会话不会发生冲突吗?例如服务 A 的命名空间为 "test",而服务 B 的命名空间为默认的“”(服务 B 是否仍会尝试使用服务 A 的会话?),或者我们是否也需要更改服务 B 的命名空间?
此外,我们无法一致地重现此问题,有时 ClassNotFoundException 不会出现,有时会出现,非常感谢任何一致地重现此问题的指南。
我们使用的spring版本也是1.3。1.RELEASE也是。
redisNamespace
配置参数旨在为会话提供特定于应用程序的命名空间,以支持多个应用程序使用同一 Redis 实例来存储会话的用例。来自 1.3.x
reference manual:
redisNamespace
- allows configuring an application specific namespace for the sessions. Redis keys and channel ids will start with the prefix of spring:session:<redisNamespace>:
.
所以你的问题的答案是肯定的——如果一个应用程序没有配置特定的命名空间,而另一个使用相同 Redis 实例的应用程序配置了,它们将使用不同的命名空间,因此不会发生冲突。
作为旁注,redisNamespace
的语义在 Spring Session 2.0 中发生了变化,因此您现在可以使用此参数来配置完整的命名空间,而不仅仅是前缀的最后一部分如 Spring 会话 1.3。来自 2.0.x
reference manual:
redisNamespace
- allows configuring an application specific namespace for the sessions. Redis keys and channel IDs will start with the prefix of <redisNamespace>:
.
在 spring 会话中,我们有两个应用程序使用相同的 Redis 服务器,因此有时我们会遇到无法序列化的 ClassNotFoundException,因为应用程序试图序列化由不同的服务器创建的会话应用程序。不过,有时这两种服务都会开始出现此错误。
为了缓解这个问题,我们确定使用 redisNamespace
。但是假设我们有 2 项服务并且只能更新一项服务。如果我们将 redisNamespace
添加到一项服务中,这两种服务上的会话不会发生冲突吗?例如服务 A 的命名空间为 "test",而服务 B 的命名空间为默认的“”(服务 B 是否仍会尝试使用服务 A 的会话?),或者我们是否也需要更改服务 B 的命名空间?
此外,我们无法一致地重现此问题,有时 ClassNotFoundException 不会出现,有时会出现,非常感谢任何一致地重现此问题的指南。
我们使用的spring版本也是1.3。1.RELEASE也是。
redisNamespace
配置参数旨在为会话提供特定于应用程序的命名空间,以支持多个应用程序使用同一 Redis 实例来存储会话的用例。来自 1.3.x
reference manual:
redisNamespace
- allows configuring an application specific namespace for the sessions. Redis keys and channel ids will start with the prefix ofspring:session:<redisNamespace>:
.
所以你的问题的答案是肯定的——如果一个应用程序没有配置特定的命名空间,而另一个使用相同 Redis 实例的应用程序配置了,它们将使用不同的命名空间,因此不会发生冲突。
作为旁注,redisNamespace
的语义在 Spring Session 2.0 中发生了变化,因此您现在可以使用此参数来配置完整的命名空间,而不仅仅是前缀的最后一部分如 Spring 会话 1.3。来自 2.0.x
reference manual:
redisNamespace
- allows configuring an application specific namespace for the sessions. Redis keys and channel IDs will start with the prefix of<redisNamespace>:
.