标签: redisson

从 Java 连接到 AWS Elasticache(Redis 集群)的正确方法是什么?

我是AWS Elasticache redis的新手,并且低于端点。

图像

我对使用JedisRedisson感到困惑,因为两者都提供单连接和集群连接类。

就像在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集群的正确方法?

预期的答案是:使用单机或集群模式。

谢谢 :)

java amazon-web-services jedis amazon-elasticache redisson

5
推荐指数
1
解决办法
2万
查看次数

Redisson 抛出许多 org.redisson.client.RedisTimeoutException

我们在 AWS 环境中使用 Redisson 3.6.1 版,在具有 2 个节点的复制模式下设置 ElastiCache。我们的主要操作是针对 LRU 有界RMapCachehttps://github.com/redisson/redisson/wiki/7.-distributed-collections#714-lru-bounded-map),我们只是getput数据(设置了maxSize500K 记录)。

但是,即使在非常低的负载下,我们也会遇到一系列org.redisson.client.RedisTimeoutExceptionwith 消息。而且,这种现象似乎主要发生在 AWS ElastiCache 的主节点上。在我们与 Redis (通过 Redisson) 通信的一些服务上,这似乎并不是真正的问题,尽管这种超时也会发生,但频率较低。Unable to send command: ....

Redis ElastiCache 集群似乎完全没有压力。CPU的利用率通常为1-2%。我们减少了retryInterval和的数量,retryAttempts以便在这种情况下快速失败并防止我们的服务线程长时间保持阻塞状态。然而,在那个低负载下(大约 100 redisson req/s),有人会期望根本不会遇到这样的问题。

amazon-web-services redis amazon-elasticache redisson

5
推荐指数
0
解决办法
923
查看次数

Java导入类/枚举内部内部类时导入顺序的重要性

这是我的班级:

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构建.

我搜索了文件,但无法找到解释.

有谁能解释一下导入在这种情况下是如何工作的?

java enums maven redisson

5
推荐指数
1
解决办法
126
查看次数

Redisson客户端setnx

我使用Redisson作为java redis库,redisson中setnx的相应函数是什么(有条件设置一个键的值,如果设置了值,则得到结果为1)。我在集群模式(分片集群)下使用redis。

谢谢

java caching redis redisson

5
推荐指数
1
解决办法
1595
查看次数

Redisson 连接池统计

我使用 Redisson 作为我的 Spring Boot 应用程序的 Redis 客户端。我想要获得连接池统计数据/指标并将其发布到 micrometer。

任何建议都将受到欢迎。

redis spring-boot redisson micrometer

5
推荐指数
0
解决办法
336
查看次数

我可以同时使用 Jedis 和 Redisson 吗?

redis我的spring boot应用程序中有一个数据库。我Jedis用作我的Redis客户端进行检索、更新和删除。

现在我愿意为我的服务添加分布式锁,所以我想到了使用Redisson分布式锁。所以我的Redisson锁将用于获取和释放Jedis客户端一些逻辑的锁。

例子:

redissonLock.acquire();

doSomeReadAndUpdateOperationsByJedis()

redissonLock.release();
Run Code Online (Sandbox Code Playgroud)

redis在这里可以使用两个客户端吗?如果没有,将分布式锁与Jedis.

caching redis jedis redisson

5
推荐指数
0
解决办法
256
查看次数

redis master故障转移后Redisson无法恢复

我们使用的是 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

5
推荐指数
0
解决办法
1278
查看次数

Redisson CacheConfig 中的 ttl 和 maxIdletime 有什么区别

我试图参考文档,但我仍然不清楚 Redisson 中CacheConfig类中的ttl 和 maxIdleTime 之间的区别。

任何人都可以请说明一下吗?

redis spring-cache redisson

4
推荐指数
1
解决办法
1855
查看次数

Redisson 客户端在字符串开头注入奇怪的字符

我正在使用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 redisson

4
推荐指数
1
解决办法
982
查看次数

在Redis中存储大型复杂Java类对象的最佳方法?

在 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...

请同时回答以下问题:

  1. 这是将巨大的复杂 java 对象放入 Redis 的最佳方法吗?(数据可以在1GB左右)
  2. 我们团队刚接触Redis,看过Redis给出的良好性能,我们应该使用它来存储复杂的数据还是只在小的单个String作为值的情况下才好?(如果是,对于我们的用例有什么建议)

谢谢。

java redis redisson

3
推荐指数
1
解决办法
6210
查看次数

从 CLI 解锁 Redis 锁

我有一个 Java 应用程序,它在本地网络上有多个实例。它使用 Redis Redlock 来管理共享数据库的完整性。这里的问题是这个 Java 应用程序仍然非常不稳定,因此它崩溃了很多次。当一个实例崩溃并且它在崩溃时保持锁定时,所有其他实例都会卡住。我的问题是,当持有锁的 Java 应用程序实例崩溃时,我能否从 Redis CLI 释放锁。

java redis redisson redlock.net

1
推荐指数
1
解决办法
2531
查看次数

使用 Redisson 进行连接池

我的应用程序对 Redis 进行了大量调用,我不想每次都创建客户端。有没有办法可以创建连接池并在需要连接到 Redis 时使用池中的连接。请注意,这里redis处于单服务器模式。

java redis amazon-elasticache redisson

1
推荐指数
1
解决办法
8519
查看次数

Redis Cli中仍显示过期的Redisson密钥

我刚刚也了解了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)

redis redisson

0
推荐指数
1
解决办法
1263
查看次数