TagCloud

Friday, August 10, 2012

Redis vs Memcached comparison

in-memory cache 적용에 있어서 redis 와 memcached 를 검토하고 있다.

성능관련 비교자료는 많으나 두가지가 추구하는 방향에 대한 비교자료는 많지 않은 것 같아 자료를 조사하고 정리할 예정임.
(벤치마크는 여러가지 환경요소에 따라 얼마든지 결과는 달라질 수 있다고 생각하기 때문에 결과보다도 테스트 환경을 유심히 봐야 한다. 서버환경, 클라이언트 환경, 그리고 개발하고자 하는 어플리케이션에서 필요한 캐시의 형태, 및 크기에 따라 얼마든지 달라질 수 있다.)


먼저 google trends 를 통해 확인(트랜드는 현재도 중요하지만 미래를 위해 - 레퍼런스가 많아지고 버그 및 기능향상이 활발해질 것이므로)






















아래는 redis 와 memcached 와 memcachedDB 에 대한 비교자료이다.
(출처 : http://redis4you.com/articles.php?id=003 )

Redis vs Memcached comparison

Here is basic comparison of Redis, Memcached and Memcachedb.
RedisMemcachedMemcacheDB
In Memory지원지원
Virtual MemoryDeprecated지원Database save the data on disk if memory is not enought.
Persistent지원지원Database backup the data on disk from time to time.
Atomic지원지원지원
Consistent지원지원지원Changes are consistent and immediate.
Replication지원확인불가Master - Slave replication.
Authentication지원확인불가확인불가Login with password.
Key / Value지원지원지원
Key Enumeration지원확인불가Most Key / Value databases can not enumerate keys e.g. Redis KEYS command.
Key / Value "buckets"지원확인불가Redis sets can be used as "buckets".
Data Structures지원Redis supports hashes, lists, sets, sorted sets and more.
Channel Pub/Sub지원Basic message queue implementation.
Memory usage10-20% Smaller
SpeedSlightly FasterVery Slow



아래는 Python/Django 에서의 writes/reads 비교자료이다.
(출처 : http://coder.cl/2011/05/comparing-redis-and-memcached/ )

















































현재 내 프로젝트에 있어서 고려해야 할 환경은 아래와 같다.

1. write 보다 read 의 성능이 우선 ( write : read 의 비율은 1: 수만~수백만 이 될 수 있다 )
2. key/value 의 형태는 String/String(Json String) 으로 value 의 사이즈는 1kbyte 이하임.
3. 현재는 알 수 없지만 향후 발생하는 thread 수에 있어서 성능저하가 얼만큼 발생하는지 확인이 필요
4. node.js 를 통해 웹서비스를 구축할 예정이므로, node.js 에서의 성능이 좋아야 함.
5. cache 데이터에 대한 안정성은 크게 중요하지 않음. (캐시가 날라가도 어플리케이션에 critical 하지 않음)
6. 단독 캐시시스템으로 구축할 예정임(분산환경이 불필요할 수 있음)
7. 전체 캐시 크기가 서버시스템 하나의 리소스(8GByte)를 넘어가지 않을 것으로 판단됨(replication도 불필요할 것으로 예상)



개인적으로 memcached 는 이미 경험이 있어 memcached 가 더 낳을 것으로 판단하고 있었으나, 다음 Article 이 성능지상주의의 욕구를 일으키며 redis 에 대해 미련을 갖게 만듬.

Java development 2.0: 현실적인 Redis
읽기 동작이 많은 애플리케이션에서는 Redis가 Memcached보다 우수한 이유
(원문 : http://www.ibm.com/developerworks/kr/library/j-javadev2-22/index.html?ca=drs- )



아무튼 redis 는 경험이 전무하므로 테스트 개발을 통해서라도 경험이 필요할것 같다.

Redis는 "REmote DIctionary System"의 약자로 메모리 기반의 Key/Value Store 혹은
Cassandra나 HBase와 같이 NoSQL DBMS로 분류되기도 하고, memcached와 같은 In memory 솔루션으로 분리되기도 한다고 함.

따라서 현재 구축하려는 시스템에서는 in-memory cache 가 필요하므로 redis 적용시 in-memory cache 로서의 architecture 를 봐야 할 것으로 판단됨.





참고자료
http://redis4you.com/articles.php?id=003
http://coder.cl/2011/05/comparing-redis-and-memcached/
http://knight76.tistory.com/entry/Memcached와-Redis-성능-테스트-비교-자료
http://bcho.tistory.com/654
네이버 미투데이에서의 응용 : http://www.slideshare.net/sdec2011/sdec2011-arcus-nhn-memcached-cloud-8467157
http://knight76.tistory.com/1393
http://www.ibm.com/developerworks/kr/library/j-javadev2-22/index.html?ca=drs-