问题标签 [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.
spring - Spring Data 的目的及其抽象级别是什么?
在试图理解“Spring Data”的目的时,我偶然发现了这篇文章,并尝试了一些关于 Gemfire/Redis 存储库及其相应 Spring-Data 组件的示例。有人可以帮我解决以下问题。
场景:当 GemFire 是我的数据存储时,我必须使用GemFireTemplate 上的创建、获取和删除方法来执行 CRUD 操作。当 Redis 是我的数据存储时,我必须在 RedisTemplate 上使用.opsForHash().put 、 .opsForHash().get 和 .opsForHash().delete方法来执行相同的 CRUD 操作。
问题:
Spring-Data 不应该为底层数据存储提供一定程度的抽象吗?如果我希望了解各自的 CRUD 方法并基于底层数据存储有不同的 API,那么 Spring-Data 组件会带来什么样的抽象?我不能直接使用 Gemfire 的 Jedis 或 Java 客户端来执行这些数据存储特定的 CRUD 操作吗?
这个链接似乎解释了这一点,但是,看起来我需要一些帮助来理解它。
没有适用于所有持久性存储的通用 API。差异太根本了。但是 Spring Data 项目确实提供了一个通用的编程模型来访问你的数据
java - Spring数据redis原子整数变量键名
我想我可能遗漏了一些重要的东西,但是如何使用 Spring Data redis 对给定键进行原子递减?
RedisAtomicLong
和RedisAtomicInteger
绑定到我们在实例化它们时指定的键。
我将如何对我选择的任何键进行原子减量?
我必须求助于多执行吗?在 vanilla redis 中,我可以通过简单的 DECR 命令自动递减任何键,而无需使用 multi exec。我在这里错过了什么吗?
谢谢,理查德。
java - Spring-data-redis RedisMessageListenerContainer 似乎有竞争条件
该lazyListen()
方法将listening
标志设置为 true,然后启动一个线程来运行 SubscriptionTask。然后调用addMessageListener()
相同的 JedisConnection 来订阅更多主题。但是 SubscriptionTask 启动过程没有保护,调用addMessageListener()
可能在该过程完成之前到达,因此订阅可能完全丢失,或者两个线程可能同时写入同一个输出流,因此 Redis 被发送一个损坏的命令。
在取消订阅所有主题后关闭任务时会出现类似的问题。在连接返回池之前,可能会在连接上发送新的订阅命令。如果该连接随后用于非订阅命令,则会发生错误。
可以通过订阅主题并等待订阅任务完全建立后再允许进一步的连接来缓解该问题,并且永远不要取消订阅。但是即使这样,如果因为抛出异常而关闭任务,仍然可能会发生这种情况,因此下次订阅主题时会创建一个新的 SubscriptionTask。
java - 如何在 Spring Redis Cache 中序列化多种类型?
只需要一个 RedisTemplate,这RedisCacheManager
意味着它只能序列化单一类型的对象。
由于我有多种类型的对象要序列化,我该怎么做呢?
java - spring data redis主从配置
以下是我的绝地配置
当我有单个服务器时,此配置运行良好。我想要做的是拥有 1 个 redis master 和多个 redis slave。根据 redis 文档,读取应该从奴隶发生,写入应该从主人发生。如何更改上述配置以使用 master 写入和 slave 读取?
假设我的主人在 192.168.10.10,奴隶在 localhost。
谢谢!
redis - 使用redis的'keys'命令时如何获取键和值
我想同时获得 key 和 values 。现在我这样做:
首先,我必须得到所有以“abc”开头的键。其次,我一一获取值。
我可以同时获取键和值吗?
更新:
谢谢苏凡兰。
我有一些与每个用户相关的属性:
在我定义两个单独的键之前:Tom.loginTimes 和 Tom.tradeMoneyCount。现在我想我应该使用 hmset:
谢谢。
redis - 无法使用 redis 模板扫描
我正在尝试使用 SCAN http://redis.io/commands/scan来遍历 redis 中存在的所有键。但是spring提供的Redis模板没有scan()方法。使用上述方法有什么技巧吗?
谢谢
redis - Jedis getResource() 花费了很多时间
我正在尝试使用前哨 redis 从 redis 获取/设置密钥。我试图用大约 2000 个并发请求对我的设置进行压力测试。
我使用哨兵将一个键放在redis上,然后我从redis执行了1000个并发获取请求。
但是使用我的哨兵的底层绝地武士正在阻止对 getResource() 的调用(池大小为 500),我实现的总体平均响应时间约为 500 毫秒,但我的目标约为 10 毫秒。
我在这里附上 jvisualvm 快照的样本
任何人都可以帮助进一步调试问题吗?
spring-data - 无法为 Spring 数据 redis 获取 redisTemplate 的连接
我正在尝试使用 Jedis 使用 Spring 数据 Redis 将消息发布到通道。这是一个非常简单的 Java 配置:
其中 redisPort=6379 和 redisHostName="localhost"。
当我运行以下测试时:
我得到以下堆栈跟踪:
spring-boot - 在 Redis 不存在的情况下防止 Spring Boot 服务在启动时失败
我们有许多使用 spring-boot-starter-redis 依赖项的 spring boot (v1.2.3) 和 Spring Data Redis 服务。
此外,我们正在使用 spring session 及其相应的 redis 依赖项
如果 redis 服务器未启动或无法访问,则服务会发出失败并中止启动。
是否可以让服务在启动时不失败?我需要设置什么才能这样做?
注意:我跟踪了关键故障,它在 Redis 对 Spring Session 的支持中。此处抛出的故障会引发涟漪效应,导致服务失败。如果与 redis 的连接失败,是否可以回退到常规会话?