首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当使用Redis作为Spring会话缓存时,如何最小化与Redis的交互?

当使用Redis作为Spring会话缓存时,如何最小化与Redis的交互?
EN

Stack Overflow用户
提问于 2020-12-28 17:38:09
回答 1查看 147关注 0票数 0

我们正在使用Spring Cloud Gateway进行OAuth2身份验证,之后它会将用户的会话信息存储在Redis中,默认设置由@EnableRedisWebSession

代码语言:javascript
复制
    @Bean
    fun redisConnectionFactory(): LettuceConnectionFactory {
        return LettuceConnectionFactory("redis-cache", 6379);
    }

    @Bean
    fun authorizedClientRepository(): ServerOAuth2AuthorizedClientRepository {
        return WebSessionServerOAuth2AuthorizedClientRepository()
    }

application.yml缓存设置:

代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

发布于 2020-12-29 10:27:20

通过阅读文档,我认为这是不可能的,因为使用本地缓存可能会导致所有连接到该Redis实例的SCG实例之间的状态不一致。

您需要定义您自己的SessionRepository实现,它将尝试本地咖啡因缓存,如果找不到,则转到Redis。作为起点,您可以复制或尝试扩展RedisSessionRepository

你唯一需要注意的是,如果你有多个SCG实例在运行,如果另一个实例更新了redis,如何处理,如果其他实例已经有一个本地缓存的实例,它们将如何处理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65475602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档