我在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,但这种情况从未发生过.
我打算用 ConnectionMultiplexer.Connect("server1:6379,server2:6379")
语法,使用地址:ElastiCache复制组中每个节点的端口号组合(以AWS术语表示).
库是否会处理死/无响应的节点,自动将命令传递给活动节点?
库是否会自动发现失败的节点现在再次可用/添加到复制组的新节点?
我正在使用Spring和Spring Security,并希望使用Spring-session-data-redis和RedisHttpSessionConfiguration来在redis上存储会话ID(因此当webapp失败并切换到另一台服务器时,客户端不会丢失会话).
我的问题,当Redis服务器关闭时会发生什么?在Redis重新启动之前,Spring是否可以通过在内存中存储会话来继续工作?有没有办法这样配置?
我在AWS ElastiCache上使用Redis,故障转移可能需要几分钟才能在DNS上配置替换主节点.
我们希望将 AWS ElastiCache 用于我们的应用程序,并且我们严格要求所有数据在传输过程中都应加密。
我试图找出 ElastiCache 访问是否是使用 SSL 完成的,但无法从 Amazon 文档中得到明确的答案。在为 ElasticCache 集群设置安全性时,可以将策略选项 aws:SecureTransport 设置为 True,但我不确定 ElastiCache 是否支持它。AWS 文档说这个选项被忽略,例如对于 S3,因为 S3 总是使用 SSL。
我正在为Redis创建一个带有Cloudformation的ElastiCache复制组,它不允许指定组名或群集名称(它们是随机生成的乱码).
所以我的想法是创建一个DNS记录来对其进行别名,但我不知道如何获取别名目标的托管区域ID.
我可以选择CNAME,但如果A记录别名选项可行,我宁愿这样做.
我想要做的是使用 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
我在 IIS 上有一个 ASP.NET Web 应用程序,它将大量数据缓存到内置 ASP.NET 缓存中。我想将缓存移至 Redis 并使用 AWS ElastiCache Redis,因为当前我的所有服务器都不共享其缓存。它们已经托管在 EC2 上。我需要了解,通过将缓存从基本相同的服务器(我托管应用程序)移动到 AWS ElastiCache 的某个网络实例,是否不会降低性能?我读到 AWS Redis 本身有一个“亚毫秒延迟”,但是我不明白,是否也提到了网络延迟,或者必须满足什么条件才能获得这种延迟。
这是我的情况:
所以这里有一个问题:
先感谢您。
latency distributed-caching amazon-web-services redis amazon-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) 最近我们的 Redis 一直面临延迟问题。
我们正在尝试调试正在发生的事情,我遇到了这篇文章,它提到检查 redis 日志以调查数据库在后台保存的频率(即使用bgsave)
我对如何访问 redis 日志文件进行了一些研究,但找不到有关如何在 AWS ElastiCache 上查找它的任何信息。我还尝试monitor从 redis cli 运行该命令,但它没有给我有关备份数据库等内容的信息。
我如何访问此类日志?
我的应用程序使用 AWSElastiCache 进行会话存储。创建了一个具有 1 个主节点和 2 个副本节点的 Redis 实例(已禁用集群模式)。我使用 Lettuce 作为 Spring boot 内部的 Redis 客户端来与 Redis 连接。我正在使用 AWSElastiCache for redis 的主要端点和读取器端点来按照 AWS 建议创建 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