Eu vi alguns sites grandes de rails que usam Memcached e Redis. Memcached é usado para coisas efêmeras que são boas para manter quentes na memória, mas podem ser perdidas / regeneradas se necessário, e Redis para armazenamento persistente. Ambos são usados para aliviar a carga do banco de dados principal para operações pesadas de leitura / gravação.
Mais detalhes:
Memcached: usado para cache de página / fragmento / resposta e está ok para atingir o limite de memória no Memcached porque ele irá LRU (usado menos recentemente) para expirar o material antigo e frequentemente manter as chaves acessadas ativas na memória. É importante que tudo no Memcached possa ser recriado a partir do banco de dados, se necessário (não é sua única cópia). Mas você pode continuar despejando coisas nele, e o Memcached descobrirá quais são os usados com mais frequência e os manterá ativos na memória. Você não precisa se preocupar em remover coisas do Memcached.
redis: você usa isso para dados que não deseja perder e é pequeno o suficiente para caber na memória. Isso geralmente inclui tarefas resque / sidekiq, contadores para limitação de taxa, resultados de teste de divisão ou qualquer coisa que você não queira perder / recriar. Você não quer exceder o limite de memória aqui, então você deve ser um pouco mais cuidadoso com o que armazena e limpa mais tarde.
O Redis começa a ter problemas de desempenho quando ultrapassa o limite de memória (corrija-me se estiver errado). É possível resolver isso configurando o Redis para agir como Memcached e LRU expirar coisas, de modo que nunca alcance seu limite de memória. Mas você não gostaria de fazer isso com tudo o que mantém no Redis, como recolocar empregos. Então, em vez de as pessoas frequentemente manterem o padrão, Rails.cache definido para usar Memcached (usando o dalli
gem). E então eles mantêm uma variável global $ redis = ... separada para fazer operações de redis.
config.cache_store = :dalli_store
$redis = $redis = Redis.connect(url: ENV['REDIS_URL'])
Pode haver uma maneira fácil de fazer tudo isso no Redis - talvez tendo duas instâncias separadas do Redis, uma com um limite de memória de disco rígido LRU, semelhante ao Memcache, e outra para armazenamento persistente. Eu não vi isso usado, mas acho que seria possível.