Como ninguém mais teve uma resposta aqui, pensei em compartilhar a única coisa que funcionou para nós. Primeiro, essas ideias não funcionaram :
- tipo de instância de cache maior: estava tendo o mesmo problema em instâncias menores do que o cache.r3.2xlarge que estamos usando agora
- aprimorando
maxmemory-policy
: nem volátil-lru nem allkeys-lru pareciam fazer alguma diferença - aumentando em
maxmemory-samples
- aumentando em
reserved-memory
- forçando todos os clientes a definir um horário de expiração, geralmente no máximo 24 horas, com alguns chamadores raros permitindo até 7 dias, mas a grande maioria dos chamadores usando de 1 a 6 horas de tempo de expiração.
Aqui está o que finalmente ajudou muito: executar um trabalho a cada doze horas que executa SCAN sobre todas as chaves em blocos ( COUNT
) de 10.000. Aqui está o BytesUsedForCache dessa mesma instância, ainda uma instância cache.r3.2xlarge sob uso ainda maior do que antes, com as mesmas configurações de antes:
Odentedeserracainousodememóriacorrespondeaostemposdotrabalhocron.Duranteesteperíododeduassemanas,onossousodeswapchegoua~45MB(comumrecordede~5GBantesdasreinicializaçõesanteriores).EaguiaEventosdeCachenoElastiCachenãorelatamaiseventosdeReinicializaçãodeCache.
Sim,issopareceumkludgequeosusuáriosnãodeveriamterquefazersozinhos,equeRedisdeveserinteligenteosuficienteparalidarcomessalimpezaporcontaprópria.Então,porqueissofunciona?Bem,oRedisnãofazmuitaounenhumalimpezapreventivadechavesexpiradas,emvezdissodependede