问题标签 [spring-data-redis]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3060 浏览

spring - Spring-data-redis 连接池未按预期工作

这是我第一个使用 spring-data-redis 的应用程序,我认为我很好地理解了这些概念(过去我曾多次使用 JdbcTemplate 和 RDBMS-es)。这就是正在发生的事情......

我遇到的问题是,每次我执行 get(key) 操作(使用 ValueOperations 对象)时,都会打开和关闭一个连接,这会导致大约 1/10 秒的延迟(这是服务器代码,所以是 1/10第二是实质性的)。这是spring XML配置:

这是相关的Java代码:

因此,同一键​​的值被检索了六次。我看到的日志输出如下:

我以为我已经遵循了有关如何设置连接池的文档,但是在处理诸如 Redis 之类的面向性能的平台时,我想到会出现这种延迟。

提前感谢您的任何帮助或提示。

0 投票
1 回答
1738 浏览

redis - Spring Cloud、Spring Data Redis 和 Eureka 的生产注意事项

我有一个跨越 4 种服务器类型的 Spring Cloud 微服务应用程序:一个安全网关、两个 UI 服务器和一个 REST API 服务器。其中每一个都将在生产环境中在自己的 VM 上运行:REST 服务器的 4 个服务器实例和其他服务器的 2 个实例。

该系统预计将为大约 30,000 名用户提供服务。

服务发现由 Eureka 提供。我有两台 Eureka 服务器用于故障转移。

共享 HTTP 会话由 Spring Session 和 Spring Data Redis 提供,在参与服务器上使用 @EnableRedisHttpSession 注释。

我决定为 Redis 设置 3 个 VM(“示例 2:带有三个框的基本设置”,网址为:http ://redis.io/topics/sentinel )。

每个 VM 将运行一个 Redis 服务器和一个 Redis 哨兵进程(其中一个 Redis 服务器将是主服务器,两个实例将是从服务器)

这一切都适用于开发机器和系统测试机器,主要在同一台服务器上运行所有进程。

我现在正转向在具有多个 VM 的类生产环境中运行性能测试。我想从已经在生产中拥有类似 Spring Cloud 设置的开发人员那里得到一些反馈和建议:

  • 我应该寻找哪些边缘情况?
  • 有没有推荐的配置设置?我的设置如下所示。
  • 是否存在在测试环境中运行良好但在生产环境中成为严重问题的配置设置?
  • 在我的特定场景中,我还想要一个从 Redis 中清除旧数据的解决方案,因为它只是为了保存会话信息而存在。如果由于某种原因 spring 不会在会话到期时清理会话数据(例如服务器被突然终止),我希望对真正的旧数据进行一些清理。我阅读了 Redis 上的 LRU/Caching 机制,但它似乎对时间没有一些保证,只有当达到一定的数据大小时。

这是我的主 Redis 服务器的配置。从站几乎相同,只是端口不同,表明它们是主站的从站:

这是一个 Redis 哨兵配置:

这是 Eureka 服务器的 application.yml:

这里是网关服务器的 application.yml,它负责基于 Zuul 的路由:

0 投票
2 回答
4902 浏览

java - Spring Session Data Redis - 从 Redis Store 获取有效会话、当前用户

我的问题是,在分布式 Web 应用程序中是否可以使用RedisOperationSessionRepository. (我的意思是我不想编写显式代码将其放入 Redis 存储然后再阅读它,我想了解框架或spring-data-redis库是否提供了它)。

我知道 Spring Redis 能够恢复会话,并且如果会话仍然有效(因为它由 Redis 支持),服务器重新启动也会保留登录

我正在寻找的功能之一是获取应用程序中当前所有可能的登录用户。我知道SessionRegistryImpl,和这种方法。但我注意到此方法不受 Redis 支持,并且在服务器重新启动后,不会返回登录用户。

我可以尝试的功能之一是 Spring Session 1.1.0,Spring session find by username。

  1. http://docs.spring.io/spring-session/docs/1.1.0.M1/reference/html5/guides/findbyusername.html
  2. https://spring.io/blog/2015/11/17/spring-session-1-1-0-m1-released

我试过了,它确实返回了有效的会话结果,但问题是我仍然需要知道所有当前使用此应用程序的有效用户名。(我不知道如何使用 Redis Store 获取它们,我可以再次存储在 Redis 中并获取它们,但我想知道是否有更好的方法)。

这是一段代码,如果我知道会话 ID,这就是我可以从当前正在使用系统的众多用户之一获取当前用户的方式。

现在我可以使用上述逻辑来获取所有当前用户,但我应该再次获取所有有效的会话 ID,我不知道如何从 Redis 存储中获取。

新更新: https ://github.com/spring-projects/spring-session/issues/255 在此链接中,我可能可以获取所有会话 ID 并在 中查找活动会话RedisOperationSessionRepository,但可能会导致性能问题。

我不确定我是否说清楚了,但是我们不能使用 spring session api 告诉 Redis 一些东西,只要给我所有有效的会话和他们当前登录的当前用户。(基于上次访问时间或类似的东西那)。

谢谢

0 投票
0 回答
353 浏览

java - 为什么 JedisConnectionFactory.createRedisPool() 不通过 dbIndex?

JedisConnectionFactory.afterPropertiesSet 方法最终会创建一个新的 JedisPool 对象,但不会传递 dbIndex。

因为它被省略了,所以该池的数据库恢复为 Protocol.DEFAULT_DATABASE,如果您配置了 JedisConnectionFactory 数据库属性,那么它是错误的。

既然可以定义 JedisConnectionFactory 的数据库属性,那为什么这个值不传给 JedisPool 构造函数呢?

JedisPool 还有其他允许传递 dbIndex 的构造函数,那么这种行为是否有原因?

我目前正在使用 spring-data-redis 1.6.2 版,但这似乎并没有改变 github 上的最新版本:https ://github.com/spring-projects/spring-data-redis/blob/ master/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactory.java

0 投票
1 回答
381 浏览

redis - Spring Data Redis - 支持命令 PUBSUB CHANNELS

RedisTemplate 不支持PUBSUB CHANNELS命令。所以一种方法是执行以下操作

这是建议的方法吗?

0 投票
1 回答
109 浏览

spring-integration - spring-xd 自定义 redis-sink

所以我认为我需要扩展 spring-xd 中提供的当前 redis-sink 以写入 redis Capped 列表,而不是创建一个新列表,但不幸的是它似乎变得更糟,因为我将不得不更深入地研究 spring-integration 和进一步回到 spring-data (spring-data-redis),因为整个 redis-sink 似乎基于 redis 上的通用 pub/sub 抽象——或者是否有某种类型的处理程序可以在消息到达后定义通道处理程序?

为了在我推送数据 redis 时具有“上限列表的效果”,我需要执行 redis “push”,然后执行“rtrim”,如此处所述 - http://redis.io/topics/data-类型介绍。如果我要构建一个自定义的 spring-integration / spring-data 模块。我相信我在这里看到了对“ltrim”但不是“rtrim”操作的支持http://docs.spring.io/spring-data/redis/docs/1.7.0.RC1/api/

任何关于如何/从哪里开始或更简单的方法的建议将不胜感激。

0 投票
0 回答
883 浏览

java - 项目无法从jedis池中获取空闲对象,但是redis服务器正在运行,还有很多空闲连接,困扰了很久

我的项目抛出的异常如下。

在此处输入图像描述

我检查了我的 redis 服务器以显示客户端状态,我发现了。

在此处输入图像描述

弹簧配置是这样的

pom.xml 是

0 投票
0 回答
1897 浏览

spring-data - spring-data-redis 1.7.x 和 lettuce 4.1.x - java.lang.IncompatibleClassChangeError

当我使用生菜 3.4.x 版时,一切正常;看起来生菜在更新到 4.1.x(从抽象类到接口)时更改了类合同,而 spring-data-redis 1.7.x 并不知道这一点。我收到以下错误:

不确定 Spring data redis 团队是否正在研究它?或者是否有一种解决方法或建议可以让我仍然保持 4.1.x 版本的生菜?

0 投票
1 回答
454 浏览

publish-subscribe - 启用 Spring 会话的应用程序不接收来自 redis 集群的会话事件

我们正在使用 spring-session 将用户会话存储在 redis 集群中。我们希望接收会话创建和会话销毁的事件。然而,redis 集群似乎没有正确发布事件。如果我们使用独立的 redis 服务器,我们会收到会话事件。

我们已在集群中的所有 redis 节点上启用所有通知。

redis 集群是否支持事件发布/订阅?

似乎在使用集群时,它试图只订阅集群中的一个节点。它应该订阅所有节点吗?

0 投票
0 回答
1365 浏览

java - 如何让spring使用StringRedisSerializer通过java代码而不是xml配置文件将会话存储到redis中

我的spring将会话存储到redis中,但关键是“\xac\xed\x00\x05t\x00(spring:session”。现在我想删除奇怪的前缀,我知道解决方案是在RedisTemplate中使用StringRedisSerializer,但是我的下面的配置代码不起作用:

有使用xml配置文件做同样事情的答案,但我更喜欢使用纯java代码,任何人都可以帮助使用上面的代码吗?谢谢。