我们正在使用Spring Cloud Gateway进行OAuth2身份验证,之后它会将用户的会话信息存储在Redis中,默认设置由@EnableRedisWebSession和
@Bean
fun redisConnectionFactory(): LettuceConnectionFactory {
return LettuceConnectionFactory("redis-cache", 6379);
}
@Bean
fun authorizedClientRepository(): ServerOAuth2AuthorizedClientRepository {
return WebSessionServerOAuth2AuthorizedClientRepository()
}application.yml缓存设置:
spring:
session:
store-type: redis
redis:
save-mode: on_set_attribute
flush-mode: on_save它工作得很好,尽管我可以看到它在每个用户请求时都会向Redis发出请求,就像它根本没有内存缓存一样。是否有任何选项可以改变这一行为(例如,只有在本地内存缓存中找不到当前用户会话时,才通过网络向Redis发出请求)?也许我可以重新实现一些类,或者除了重写所有缓存逻辑之外,没有其他方法可以这样做?很抱歉,对于一个相当广泛的问题,我在文档中找不到任何关于这个主题的信息。或者您可以向我指出Spring Session源代码中的类,在那里实现了这个逻辑,这样我就可以找出我的选择。
我使用spring-cloud-starter-gateway 2.2.5.RELEASE,spring-session-core 2.3.1版本,spring-boot-starter-data-redis-reactive和spring-session-data-redis。
发布于 2020-12-29 10:27:20
通过阅读文档,我认为这是不可能的,因为使用本地缓存可能会导致所有连接到该Redis实例的SCG实例之间的状态不一致。
您需要定义您自己的SessionRepository实现,它将尝试本地咖啡因缓存,如果找不到,则转到Redis。作为起点,您可以复制或尝试扩展RedisSessionRepository。
你唯一需要注意的是,如果你有多个SCG实例在运行,如果另一个实例更新了redis,如何处理,如果其他实例已经有一个本地缓存的实例,它们将如何处理。
https://stackoverflow.com/questions/65475602
复制相似问题