Memcached와 Redis를 모두 사용하는 대규모 레일 사이트를 몇 개 보았습니다. Memcached는 메모리를 뜨겁게 유지하는 것은 좋지만 필요한 경우 손실 / 재생성 할 수있는 임시 작업에 사용되며 영구 저장소에는 Redis가 사용됩니다. 둘 다 읽기 / 쓰기 무거운 작업을 위해 메인 DB에서 부하를 제거하는 데 사용됩니다.
자세한 내용은:
Memcached : 페이지 / 조각 / 응답 캐싱에 사용되며 Memcached의 메모리 제한에 도달해도 괜찮습니다. LRU (최근에 가장 적게 사용됨)를 사용하여 이전 항목을 만료시키고 액세스 된 키를 자주 메모리에서 핫 상태로 유지하기 때문입니다. 필요한 경우 Memcached의 모든 항목을 DB에서 다시 만들 수 있어야합니다 (유일한 복사본이 아님). 그러나 계속해서 물건을 덤핑 할 수 있으며 Memcached는 가장 자주 사용되는 것을 파악하고 메모리에서 핫 상태를 유지합니다. Memcached에서 항목을 제거하는 것에 대해 걱정할 필요가 없습니다.
redis : 손실을 원하지 않는 데이터에 사용하고 메모리에 맞을만큼 작습니다. 여기에는 일반적으로 resque / sidekiq 작업, 속도 제한을위한 카운터, 분할 테스트 결과 또는 손실 / 재생성을 원하지 않는 모든 것이 포함됩니다. 여기에서 메모리 한도를 초과하고 싶지 않으므로 나중에 무엇을 저장하고 정리할지에 대해 조금 더주의해야합니다.
Redis는 메모리 제한을 초과하면 성능 문제가 발생하기 시작합니다 (내가 틀렸다면 수정). Memcached 및 LRU 만료 항목처럼 작동하도록 Redis를 구성하여이 문제를 해결할 수 있으므로 메모리 제한에 도달하지 않습니다. 그러나 Resque 작업과 같이 Redis에 보관하는 모든 항목으로이 작업을 수행하고 싶지는 않습니다. 따라서 사람들이 종종 기본값을 유지하는 대신 Rails.cache가 Memcached를 사용하도록 설정합니다 ( dalli
젬 사용). 그런 다음 redis 작업을 수행하기 위해 별도의 $ redis = ... 전역 변수를 유지합니다.
config.cache_store = :dalli_store
$redis = $redis = Redis.connect(url: ENV['REDIS_URL'])
Redis에서이 모든 작업을 쉽게 수행 할 수있는 방법이있을 수 있습니다. 하나는 Memcache와 유사한 LRU 하드 메모리 제한이있는 두 개의 개별 Redis 인스턴스를, 다른 하나는 영구 스토리지를위한 것입니까? 나는 이것이 사용되는 것을 보지 못했지만 그것이 가능할 것이라고 생각합니다.