我是AWS Elasticache redis的新手,并且低于端点。
我对使用Jedis和Redisson感到困惑,因为两者都提供单连接和集群连接类。
就像在Jedis中一样,对于单个连接我们可以使用:
Jedis conn = new Jedis("endpoint_address");
Run Code Online (Sandbox Code Playgroud)
对于集群连接,我们使用:
Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
jedisClusterNodes.add(new HostAndPort("redis_cluster_ip", 7379));
JedisCluster jc = new JedisCluster(jedisClusterNodes);
Run Code Online (Sandbox Code Playgroud)
当我想使用Redisson时,也会出现这些选项。我不想比较这两个库,我的问题是:当您只有一个端点并且仍然可以使用 AWS 自动扩展功能时,哪一种是连接到AWS Redis Elasticache集群的正确方法?
预期的答案是:使用单机或集群模式。
谢谢 :)
我们在 AWS 环境中使用 Redisson 3.6.1 版,在具有 2 个节点的复制模式下设置 ElastiCache。我们的主要操作是针对 LRU 有界RMapCache(https://github.com/redisson/redisson/wiki/7.-distributed-collections#714-lru-bounded-map),我们只是get和put数据(设置了maxSize500K 记录)。
但是,即使在非常低的负载下,我们也会遇到一系列org.redisson.client.RedisTimeoutExceptionwith 消息。而且,这种现象似乎主要发生在 AWS ElastiCache 的主节点上。在我们与 Redis (通过 Redisson) 通信的一些服务上,这似乎并不是真正的问题,尽管这种超时也会发生,但频率较低。Unable to send command: ....
Redis ElastiCache 集群似乎完全没有压力。CPU的利用率通常为1-2%。我们减少了retryInterval和的数量,retryAttempts以便在这种情况下快速失败并防止我们的服务线程长时间保持阻塞状态。然而,在那个低负载下(大约 100 redisson req/s),有人会期望根本不会遇到这样的问题。
这是我的班级:
package pepelu;
import pepelu.ImportTest.InnerClass.InnerEnum;
import javax.annotation.Resource;
public class ImportTest {
@Resource
public static class InnerClass {
public enum InnerEnum {
A
}
}
public static void main(String[] args) {
System.out.println(InnerEnum.A);
}
}
Run Code Online (Sandbox Code Playgroud)
当我使用maven构建时,它会给出一个编译错误:
mvn clean compile
Run Code Online (Sandbox Code Playgroud)
[ERROR] /Users/finup/Desktop/a/importtest/src/main/java/pepelu/ImportTest.java:[8,6]无法找到符号
将导入订单更改为:
import javax.annotation.Resource;
import pepelu.ImportTest.InnerClass.InnerEnum;
Run Code Online (Sandbox Code Playgroud)
我有一个成功的maven构建.
我搜索了文件,但无法找到解释.
有谁能解释一下导入在这种情况下是如何工作的?
我使用Redisson作为java redis库,redisson中setnx的相应函数是什么(有条件设置一个键的值,如果设置了值,则得到结果为1)。我在集群模式(分片集群)下使用redis。
谢谢
我使用 Redisson 作为我的 Spring Boot 应用程序的 Redis 客户端。我想要获得连接池统计数据/指标并将其发布到 micrometer。
任何建议都将受到欢迎。
redis我的spring boot应用程序中有一个数据库。我Jedis用作我的Redis客户端进行检索、更新和删除。
现在我愿意为我的服务添加分布式锁,所以我想到了使用Redisson分布式锁。所以我的Redisson锁将用于获取和释放Jedis客户端一些逻辑的锁。
例子:
redissonLock.acquire();
doSomeReadAndUpdateOperationsByJedis()
redissonLock.release();
Run Code Online (Sandbox Code Playgroud)
redis在这里可以使用两个客户端吗?如果没有,将分布式锁与Jedis.
我们使用的是 Redisson 3.17.0 和 redis 版本 6.0.8。我们的 Redis 集群模式设置有 3 个主节点,每个主节点有大约 4-5 个副本。当redis master发生故障转移时,redisson开始抛出无法将命令写入连接的异常。即使故障转移完成后(大约 30 秒),异常也不会停止。只有运行 redisson 的实例的反弹才能解决此错误。这影响了我们服务的高可用性。我们将 pingConnectionInterval 设置为 5000 毫秒。我们的阅读模式仅限于大师。
org.redisson.client.RedisTimeoutException: Command still hasn't been written into connection! Try to increase nettyThreads setting. Payload size in bytes: 81. Node source: NodeSource [slot=10354, addr=null, redisClient=null, redirect=null, entry=null], connection: RedisConnection@1578264320 [redisClient=[addr=rediss://-:6379], channel=[id: 0xb0f98c8c, L:/-:55678 - R:-/-:6379], currentCommand=null, usage=1], command: (EVAL), params: [local value = redis.call('hget', KEYS[1], ARGV[2]); after 2 retry attempts
Run Code Online (Sandbox Code Playgroud)
以下是我们的 redisson 客户端配置:
redisClientConfig: {
endPoint: "rediss://$HOST_IP:6379"
scanInterval: 1000 …Run Code Online (Sandbox Code Playgroud) 我试图参考文档,但我仍然不清楚 Redisson 中CacheConfig类中的ttl 和 maxIdleTime 之间的区别。
任何人都可以请说明一下吗?
我正在使用Redisson客户端发布有关某个主题的字符串消息,但由于某些原因,发布的消息总是在开头包含一些奇怪的字符:
例如:当我在 redis 级别发布字符串 "{"event":"notification"}" 时,我最终得到以下结果: "\x04>\x18{"event":"notification"}"
1) "pmessage"
2) "*"
3) "active_project_users:1"
4) "\x04>\x18{\"event\":\"notification\"}"
Run Code Online (Sandbox Code Playgroud)
知道如何让那些奇怪的字符消失吗?
我的java代码如下所示:
private void publish(String channel, String message) {
RTopic topic = redissonClient.getTopic(channel);
topic.publish("{\"event\":\"notification\"}");
}
Run Code Online (Sandbox Code Playgroud)
我正在使用 redis:3.2 和 radisson-spring-boot-starter 3.16.1
谢谢
在 Redis 中存储嵌套和复杂的 java 对象的最佳方法是什么。我们的做法如下。
我们正在使用Redisson Java 客户端库进行 Redis 交互。请看下面的代码:
try{
Config conf = new Config();
conf.useSingleServer().setTimeout(3600000);
conf.useSingleServer().setRetryInterval(3600000);
conf.useSingleServer().setAddress("redis://127.0.0.1:6379");
RedissonClient redisson = Redisson.create(conf);
RMap<String,Object> map = redisson.getMap("myCache");
MyClass myObject; // This is the big complex object.
map.put("key", myObject);
redisson.shutdown();
}catch (Exception ex) {
ex.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
同样,我们使用 get 从 redis 填充我们的 myObject,而不是 put。
由于 redis 中存储了大数据,我们增加了超时时间,我们收到以下异常:
命令的命令执行超时:(EVAL) with params...
请同时回答以下问题:
谢谢。
我有一个 Java 应用程序,它在本地网络上有多个实例。它使用 Redis Redlock 来管理共享数据库的完整性。这里的问题是这个 Java 应用程序仍然非常不稳定,因此它崩溃了很多次。当一个实例崩溃并且它在崩溃时保持锁定时,所有其他实例都会卡住。我的问题是,当持有锁的 Java 应用程序实例崩溃时,我能否从 Redis CLI 释放锁。
我的应用程序对 Redis 进行了大量调用,我不想每次都创建客户端。有没有办法可以创建连接池并在需要连接到 Redis 时使用池中的连接。请注意,这里redis处于单服务器模式。
我刚刚也了解了Redis和Redisson。基本上,我试图使用Redis在我的应用程序中存储用于授权的AcessTokens / RefreshTokens。所以我想用到期时间存储令牌。我使用Spring Data Redis来存储令牌,但是没有Api使Map中的每个条目都失效。我碰到了这篇文章Spring Data Redis Expire Key,因此查找了Redisson。我尝试了一个简单的maven java项目来测试到期时间。这是pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.bridgelabz</groupId>
<artifactId>redissonApp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>redissonApp</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.3.0</version>
</dependency>
</dependencies>
</project>
Run Code Online (Sandbox Code Playgroud)
以下是令牌类
package com.bridgelabz.redissonApp;
public class Token {
private String accessToken;
private int id;
public Token() { }
public Token(String accessToken, int id) {
this.accessToken = accessToken;
this.id = id;
}
public String getAccessToken() {
return accessToken;
} …Run Code Online (Sandbox Code Playgroud) redisson ×13
redis ×10
java ×6
caching ×2
jedis ×2
enums ×1
maven ×1
micrometer ×1
redlock.net ×1
spring-boot ×1
spring-cache ×1