在使用Spring Boot开发项目时,我们经常需要存储会话,因为一些用户信息或登录信息会存储在会话中。
传统的web服务将会话存储在内存中。一旦服务挂起,会话就会消失。这时,我们需要存储session,Redis是一个非关系数据库,用来缓存session。我们可以通过配置或注释来集成Spring Boot和Redis。
在分布式系统中,会涉及到会话共享。当同时部署多个服务时,需要共享session,Spring Session可以帮助我们实现这个功能。
将Spring Session集成到Spring Boot框架中,并用Redis进行缓存,是目前非常流行的解决方案。接下来让我们跟着边肖学吧。
智能理念
操作方法 01首先,我们创建一个Spring Boot 2.x的项目,在application.properties配置文件中添加Redis的配置。Spring和Redis的集成可以参考边肖的其他文章,这里就不详细解释了。
我们将服务端口server.port设置为端口8080,以启动第一个服务。
接下来,我们需要在pom文件中添加两个依赖项,spring-boot-starter-data-Redis和spring-session-data-redis。spring-boot-starter-data-redis用于集成Spring Boot和redis,Spring-session-data-redis集成了Spring-session和spring-data-redis,提供了一个session和Redis的集成方案。
接下来,我们创建一个配置类RedisSessionConfig,它使用@Configuration注释来表示它是一个配置类。
在这个类上,我们还添加了注释@EnableRedisHttpSession,表示打开了Redis的会话管理。
如果需要设置过期时间,可以使用@ enableredishtpsession(maxinactiveinvalinseconds = 3600)表示一小时后过期。
如果需要同时设置Redis的命名空空间,使用@ enabledishttpsession(maxinactiveinvalinsorses = 3600,Redis namespace = " { spring . session . Redis . namespace } quot;),其中{ spring . session . redis . namespace }表示从配置文件中读取这个名称空。
配置完成后,我们编写一个测试类SessionController。在这个类中,我们编写了两个方法,一个用于在会话中存储数据,另一个用于从会话中获取数据。代码如下图所示,我们访问请求的url。
startup类非常简单,通常是通用的。我们创建一个名为SpringbootApplication的启动类,用main方法启动它。
接下来我们用Postman分别请求上面两个接口,先请求数据存储接口,再请求数据检索接口。结果如下图所示,我们可以看到数据是从redis中检索出来的。
还要注意sessionId的值,这是会话共享的关键。
为了验证这两个服务是否共享会话,我们修改了项目的配置文件,将服务端口server.port更改为8090,然后启动服务。
此时,我们不需要位于请求存储数据的接口。我们只需要修改请求的端口号,并请求再次检索数据的接口。
从下图可以看出,两个请求的sessionId值是相同的,从而实现了会话的共享。
以上,我们已经完成了SpringSeesion与SpringBoot集成实现Redis缓存的功能。这里也推荐一个Redis的可视化工具,RedisDesktopManager。我们可以配置Redis数据库的连接,然后可以直观的查看Redis中存储的会话。如下图所示,会话空的名称是share,它是从配置文件中读取的。
如果Redis服务器是很多项目共享的,强烈建议配置命名室空。否则,同时打开多个项目的浏览器页面可能会导致会话混乱。