当前位置: 首页 > 知识库问答 >
问题:

当使用Redis作为Spring会话缓存时,如何尽量减少与它的交互?

丰佐
2023-03-14

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

    @Bean
    fun redisConnectionFactory(): LettuceConnectionFactory {
        return LettuceConnectionFactory("redis-cache", 6379);
    }

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

应用程序。yml缓存设置:

spring:
  session:
    store-type: redis
    redis:
      save-mode: on_set_attribute
      flush-mode: on_save

它工作得很好,但我可以看到它会根据每个用户的请求向Redis发出请求,就像它根本没有内存缓存一样。是否有任何选项可以改变这种行为(即,只有在本地内存缓存中找不到当前用户会话时,才通过网络向Redis发出请求)?也许我可以重新实现一些类,或者除了重写所有缓存逻辑之外,没有其他方法可以实现它?很抱歉,有一个相当广泛的问题,但我在文档中没有找到关于这个主题的任何信息。或者你可以告诉我Spring会话源代码中的类,在那里实现了这个逻辑,这样我就可以知道我的选项是什么。

我使用的是spring cloud starter gateway 2.2.5。发布,spring session core 2.3.1。RELEASE、spring boot starter数据redis reactive和spring会话数据redis。

共有1个答案

翟奇
2023-03-14

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

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

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

 类似资料:
  • 我已经编辑了php配置以保存Redis上的会话。一切正常,但我意识到,有一天已经过去了,通过在redis-cli上运行命令键*,显示了一个巨大的php-session条目列表。我的问题是php是否会在任何时候删除这些键,或者我必须做一些事情来防止这种情况发生。我对此很担心。

  • 我使用Infinispan缓存作为会话作用域bean,在Spring MVC应用程序中缓存与用户相关的数据对象。 现在我们迁移到Spring引导,我们想使用@enableRedisHttp会话,但我们面临的问题是,附加到会话的InfinispanCacheManager是不可序列化的,产生以下异常: 通常,我们会平衡用户对多个节点的请求,因此需要在节点之间共享缓存(使用Redis store)。

  • 我正在使用spring boot开发客户端应用程序。在运行spring boot应用程序(使用完全可执行的jar)时,x64服务器的内存占用约为190M,x86服务器的内存占用约为110M。 我的jvm选项是(-xmx64m-xms64m-xx:maxpermsize=64m-server),为什么在x64服务器中,内存占用这么大?如何将内存使用量降低到150M以下? 多谢了。

  • 问题内容: 我正在编写独立于操作系统的无锁队列,到目前为止,它工作得很好,但是内存管理方面的问题很小。我不确定它的gcc问题还是我的。问题:将元素添加到列表时,内存增加,但是从列表中删除元素(free(elementPointer);)时,内存使用率没有变化。 但是,当我使用pthreads时,N个生产者和M个消费者的 内存使用量始终约为10mb(当尝试添加和删除〜10kk元素时),因此看起来自由

  • 本文向大家介绍如何高效使用Redis作为LRU缓存,包括了如何高效使用Redis作为LRU缓存的使用技巧和注意事项,需要的朋友参考一下 当用Redis作为一个LRU存储时,有些时候是比较方便的,在你增添新的数据时会自动驱逐旧的数据。这种行为在开发者论坛是非常有名的,因为这是流行的memcached系统的默认行为。 LRU实际上只是支持驱逐的方式之一。这页包含更多一般的Redis maxmemory

  • 问题内容: 我的应用程序当前将Spring Session与Redis一起用作后端。 我搜索了Spring Session 的官方文档,但使用该模块时找不到默认的会话超时。 另外,我不确定如果需要如何更改默认超时。 有人可以请教吗? 问题答案: 使用Redis存储库时配置会话超时的最简单方法是 当存储库中不再有会话时,该会话将 过期 。可以同时在和上配置超时。默认值为 30分钟 。 如果您使用的是