标签: amazon-elasticache

我的Elasticache Redis节点中的当前连接数不断增加

我在tomcat web应用程序中使用Jedis连接到Elascticache Redis节点.该应用程序在白天被数百名用户使用.我不确定这是否正常,但每当我使用cloudwatch指标检查当前连接数时,我看到当前连接增加而不会下降.

这是我的Jedis池配置:

public static JedisPool getPool(){
        if(pool == null){
            JedisPoolConfig config = new JedisPoolConfig();
            config.setMinIdle(5);
            config.setMaxIdle(35);
            config.setMaxTotal(1500);
            config.setMaxWaitMillis(3000);
            config.setTestOnBorrow(true);
            config.setTestWhileIdle(true);
            pool = new JedisPool(config, PropertiesManager.getInstance().getRedisServer());
        }
        return pool;    
    }
Run Code Online (Sandbox Code Playgroud)

这就是我总是使用池连接来执行redis命令的方法:

        Jedis jedis = JedisUtil.getPool().getResource();
        try{
            //Redis commands
            }
        catch(JedisException e){
            e.printStackTrace();
            throw e;
        }finally{
            if (jedis != null) JedisUtil.getPool().returnResource(jedis);
        }
Run Code Online (Sandbox Code Playgroud)

使用这种配置,计数目前超过200.我是否遗漏了应该丢弃或杀死未使用连接的内容?我将maxIdle设置为35,我预计当流量非常低时,计数会下降到35,但这种情况从未发生过.

java tomcat redis jedis amazon-elasticache

8
推荐指数
2
解决办法
3897
查看次数

使用StackExchange.Redis和ElastiCache

我打算用 ConnectionMultiplexer.Connect("server1:6379,server2:6379") 语法,使用地址:ElastiCache复制组中每个节点的端口号组合(以AWS术语表示).

库是否会处理死/无响应的节点,自动将命令传递给活动节点?
库是否会自动发现失败的节点现在再次可用/添加到复制组的新节点?

redis amazon-elasticache stackexchange.redis

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

关于Redis的春季会议 - Redis关闭时的故障转移是什么

我正在使用Spring和Spring Security,并希望使用Spring-session-data-redis和RedisHttpSessionConfiguration来在redis上存储会话ID(因此当webapp失败并切换到另一台服务器时,客户端不会丢失会话).

我的问题,当Redis服务器关闭时会发生什么?在Redis重新启动之前,Spring是否可以通过在内存中存储会话来继续工作?有没有办法这样配置?

我在AWS ElastiCache上使用Redis,故障转移可能需要几分钟才能在DNS上配置替换主节点.

spring caching spring-security redis amazon-elasticache

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

AWS ElastiCache 中的 SSL 支持

我们希望将 AWS ElastiCache 用于我们的应用程序,并且我们严格要求所有数据在传输过程中都应加密。

我试图找出 ElastiCache 访问是否是使用 SSL 完成的,但无法从 Amazon 文档中得到明确的答案。在为 ElasticCache 集群设置安全性时,可以将策略选项 aws:SecureTransport 设置为 True,但我不确定 ElastiCache 是否支持它。AWS 文档说这个选项被忽略,例如对于 S3,因为 S3 总是使用 SSL。

amazon-web-services amazon-elasticache

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

如何创建"别名目标"Route53中的弹性缓存复制组的DNS记录

我正在为Redis创建一个带有Cloudformation的ElastiCache复制组,它不允许指定组名或群集名称(它们是随机生成的乱码).

所以我的想法是创建一个DNS记录来对其进行别名,但我不知道如何获取别名目标的托管区域ID.

我可以选择CNAME,但如果A记录别名选项可行,我宁愿这样做.

dns amazon-elasticache aws-cloudformation amazon-route53

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

如何使用 AWS-CLI 从 S3 中的快照创建 Redis ElastiCache 集群?

我想要做的是使用 aws-cli 根据我在 S3 中的 ElastiCache 快照创建一个 ElastiCache 集群,我的 ElastiCache 是启用集群的模式。

我按照本教程创建了一个启用集群的 Redis 缓存,这是我的命令: aws elasticache create-cache-cluster --cache-cluster-id stevescachecluster1 --cache-node-type cache.m4.large --engine redis --engine-version 3.2.4 --cache-parameter-group default.redis3.2.cluster.on --num-cache-nodes 1 --snapshot-arns arn:aws:s3:::MY_S3_BUCKET-elasticache/stevesun-elasticache-0002.rdb --cache-subnet-group-name my-cache-dev

由于上述命令失败 An error occurred (InvalidParameterCombination) when calling the CreateCacheCluster operation: Cluster mode should be disabled in parameter group, but found it is enabled.

这让我感到困惑,上面链接的教程明确指出,如果您想要启用集群模式的缓存,请在您的参数中使用.cluster.on选项。

然后我更多地研究了这个 aws-cli 命令参考:对于这个参数:--cache-parameter-group-name,它的文档说:You cannot use any parameter group which has cluster-enabled='yes' when creating a …

amazon-s3 amazon-web-services redis amazon-elasticache aws-cli

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

AWS ElastiCache Redis 是否存在明显的网络延迟?

我在 IIS 上有一个 ASP.NET Web 应用程序,它将大量数据缓存到内置 ASP.NET 缓存中。我想将缓存移至 Redis 并使用 AWS ElastiCache Redis,因为当前我的所有服务器都不共享其缓存。它们已经托管在 EC2 上。我需要了解,通过将缓存从基本相同的服务器(我托管应用程序)移动到 AWS ElastiCache 的某个网络实例,是否不会降低性能?我读到 AWS Redis 本身有一个“亚毫秒延迟”,但是我不明白,是否也提到了网络延迟,或者必须满足什么条件才能获得这种延迟。

这是我的情况:

  1. IIS EC2 WinServer2008R2 上的 2 个应用服务器处于负载平衡状态
  2. 需要将数千个各种对象缓存为 JSON,最多可达 1M 个符号
  3. 所有服务器可以设置在同一区域

所以这里有一个问题:

  1. AWS ElastiCache Redis 是合适的解决方案吗?
  2. 我应该怎么做才能最大限度地减少 Redis 的延迟?

先感谢您。

latency distributed-caching amazon-web-services redis amazon-elasticache

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

什么是推荐的 Redisson 配置以避免连接到 AWS Elasticache 时超时?

我们正在使用 Redisson 连接到具有 1 个主节点和 2 个副本节点的 AWS elasticache 上的复制 Redis。

该应用程序使用多个RLocalCachedMaps、Locks 和几千个Topics来跟踪用户状态。(随着用户在线和离线,主题和订阅来来去去)。

然而,我们经常得到一系列RedisTimeoutExceptions,最初这些是在服务器运行了几天之后并且会持续发生直到服务器重新启动,或者会因内存不足错误而崩溃。这让我认为这是缺乏可用的订阅,但是如果我正确理解它们,我们的设置(如下)应该支持超过 100,000 个订阅并且我们还没有接近。
此外,其中一些会在预热期间发生,服务器上的负载相对较轻,经过几次异常连接后,几天都没有大问题,这表明这不是纯粹的订阅问题。命令每次都是简单的锁定/发布/订阅,而不是复杂的批处理。

AWS Elasticache 节点上的负载始终很小,我们的服务器部署在 AWS EC2 实例上,因此应该具有相对良好的连接性!

我们在数量上获得的 2 个例外是锁定或订阅主题:

Caused by: org.redisson.client.RedisTimeoutException: Subscribe timeout: (7500ms)
at org.redisson.command.CommandAsyncService.syncSubscription(CommandAsyncService.java:142) ~[redisson-3.8.2.jar!/:na]
at org.redisson.RedissonLock.lockInterruptibly(RedissonLock.java:149) ~[redisson-3.8.2.jar!/:na]
at org.redisson.RedissonLock.lockInterruptibly(RedissonLock.java:136) ~[redisson-3.8.2.jar!/:na]
at org.redisson.RedissonLock.lock(RedissonLock.java:118) ~[redisson-3.8.2.jar!/:na] 
Run Code Online (Sandbox Code Playgroud)

java.util.concurrent.CompletionException: org.redisson.client.RedisTimeoutException
at org.redisson.misc.RedissonPromise.await(RedissonPromise.java:197) ~[redisson-3.8.2.jar!/:na]
at org.redisson.misc.RedissonPromise.await(RedissonPromise.java:206) ~[redisson-3.8.2.jar!/:na]
at org.redisson.command.CommandAsyncService.syncSubscription(CommandAsyncService.java:141) ~[redisson-3.8.2.jar!/:na]
at org.redisson.RedissonTopic.addListener(RedissonTopic.java:133) ~[redisson-3.8.2.jar!/:na]
at org.redisson.RedissonTopic.addListener(RedissonTopic.java:109) ~[redisson-3.8.2.jar!/:na]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[na:1.8.0_111]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_111]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_111]
at …
Run Code Online (Sandbox Code Playgroud)

amazon-elasticache redisson

7
推荐指数
0
解决办法
2369
查看次数

如何访问 AWS ElastiCache 上的 Redis 日志

最近我们的 Redis 一直面临延迟问题。

我们正在尝试调试正在发生的事情,我遇到了这篇文章,它提到检查 redis 日志以调查数据库在后台保存的频率(即使用bgsave

我对如何访问 redis 日志文件进行了一些研究,但找不到有关如何在 AWS ElastiCache 上查找它的任何信息。我还尝试monitor从 redis cli 运行该命令,但它没有给我有关备份数据库等内容的信息。

我如何访问此类日志?

amazon-web-services redis amazon-elasticache

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

如何使用主终端节点和读取器终端节点连接到 AWS ElastiCache

我的应用程序使用 AWSElastiCache 进行会话存储。创建了一个具有 1 个主节点和 2 个副本节点的 Redis 实例(已禁用集群模式)。我使用 Lettuce 作为 Spring boot 内部的 Redis 客户端来与 Redis 连接。我正在使用 AWSElastiCache for redis 的主要端点和读取器端点来按照 AWS 建议创建 Redis 连接。

https://aws.amazon.com/about-aws/whats-new/2019/06/amazon-elasticache-launches-reader-endpoint-for-redis/

这是我用来创建连接工厂的 Bean

@Bean
 public LettuceConnectionFactory redisConnectionFactory(){
        LettuceClientConfiguration clientConfig = LettuceClientConfiguration.builder()
                .readFrom(ReadFrom.REPLICA_PREFERRED)
                .useSsl()
                .build();
        RedisStaticMasterReplicaConfiguration redisStaticMasterReplicaConfiguration = new
                        RedisStaticMasterReplicaConfiguration(primaryEndPoint,6379);
        redisStaticMasterReplicaConfiguration.addNode(readerEndPoint, 6379);
        redisStaticMasterReplicaConfiguration.setPassword(redisPassword);
        return new LettuceConnectionFactory(redisStaticMasterReplicaConfiguration, clientConfig);
    }
Run Code Online (Sandbox Code Playgroud)

看起来读取器端点没有将读取流量平均分配到所有副本节点。通过查看云监视指标,我发现一个副本节点的 CacheHits 为 0,并且似乎所有读取请求都由两个副本节点中的一个副本节点提供服务。建议采用什么方法与 Redis 建立连接,以有效利用集群中的所有副本节点进行读取操作。

redis spring-data lettuce amazon-elasticache spring-data-redis

7
推荐指数
0
解决办法
1693
查看次数