본문 바로가기

탁월한 전략

11 Common Web Use Cases Solved in Redis

원제 : 11 Common Web Use Cases Solved in Redis

번역 : 11 Common Web Use Cases Solved in Redis


여러분의 스택에 Redis의 장점만 추가하는 방법(How to take advantage of Redis just adding it to your stack)에서, Salvatore 'antirez' Sanfilippo Redis의 가용성을 처리하는 독특한 데이터 구조의 장점을 취하여 몇 가지 공통적인 문제를 해결하는 방법을 보여줍니다. LPUSH, LTRIM, LREM 같은 Redis 기본 명령어는 완료를 필요로 하는 프로그래머들이 태스크를 완수하는데 사용되지만, 이들은 전통적인 저장에서 어렵거나 느립니다. 매우 유용하고 실용적인 기사입니다. 여러분의 프레임워크에서 이런 작업을 어떻게 완수하시겠습니까?

  1. 홈페이지에서 최근 아이템 목록을 보여줍니다(Show latest items listings in your home page). 이는 메모리 캐시에 살아있고 매우 빠릅니다. LPUSH는 키로 저장되는 목록의 앞에 컨텐트 ID를 삽입할 때 사용합니다. LTRIM은 목록을 5000개까지 제한할 때 사용합니다. 사용자가 이 캐시 뒤편의 페이지를 필요하다면 오직 데이터베이스로 접근해야 합니다.
  2. 삭제와 필터링(Deletion and filtering). 캐시된 기사를 삭제하려면 LREM을 이용하여 캐시에서 제거합니다
  3. 순위판과 관련된 문제(Leaderboards and related problems). 순위판은 점수로 정렬된 집합입니다. ZADD명령어는 직접 이것을 구현했으며 ZREVRANGE명령어는 점수에 따라 상위 100명의 사용자를 얻을 수 있고, ZRANK 는 사용자의 순위를 구할 수 있습니다. 매우 직관이적이고 쉽습니다A leader board is a set sorted by score. 
  4. 투표와 시간에 따라 사용자를 정렬합니다(Order by user votes and time). 이것은 점수가 시간에 따라 변경되는 Reddit 같은 순위보드입니다. LPUSH + LTRIM 은 목록에 기사를 추가할 때 사용합니다. 백그라운드 작업은 목록을 폴링하고 목록의 순위를 재계산하고 ZADD는 새로운 순위에서 목록을 이주시킬 때 사용합니다. 이 목록은 아주 부하가 높은 사이트에서도 매우 빠르게 조회할 수 있습니다. 더 쉬우며, 폴링에 필요한 코드는 우아하지 않습니다
  5. 아이템 만료 구현하기(Implement expires on items). 시간에 따라 정렬된 목록을 유지하기 위해 유닉스 시간과 키를 사용합니다. 아이템 만료의 어려운 작업은 current_time+time_to_live 인덱싱으로 구현합니다. 또다른 백그라운드 worker SCORES를 사용하는 ZRANGE를 이용하는 쿼리를 만들고 시간이 지난 개체들을 삭제합니다.
  6. 회수 세기(Counting stuff). 모든 종류의 통계유지는 공통적인데, IP 주소를 블록할 때를 알고싶어 할 것입니다. INCRBY 명령어는 카운터를 원자적으로 유지하게 합니다; GETSET은 원자적으로 카운터를 초기화합니다; expire 속성은 키가 삭제될 시점을 알려줄 때 사용합니다
  7. 일정 시간에 유일한 N 아이템들(Unique N items in a given amount of time). 이것은 유니크 방문자 문제이고 모든 페이지에 SADD를 사용하여 해결합니다. SADD는 이미 존재하며 집합에 구성요소를 추가하지 않습니다.
  8. 무엇이든지, 통계, 안티 스팸, 어떤 종류의 일이든 실시간 분석(Real time analysis of what is happening, for stats, anti spam, or whatever). Redis 기본 명령어를 이용하면 스팸 필터 시스템이나 다른 실시간 추적 시스템을 구현하기 매우 쉽습니다
  9. 발행/구독(Pub/Sub). 시스템에서 어떤 데이터가 일반적인 작업인 업데이트에 누가 관심 있는지에 대한 맵을 유지합니다. RedisSUBSCRIBE, UNSUBSCRIBE,PUBLISH처럼 쉽게 사용할 명령어인 pub/sub 기능을 가지고 있습니다.
  10. Queues. 큐는 프로그래밍 어디에나 있습니다. push pop 종류의 명령어를 추가하면, Redis는 blocking queue 명령어를 가지고 있는데, 프로그램은 다른 프로그램이 큐를 추가할 때까지 대기할 수 있습니다. 여러분은 업데이트할 RSS 피드의 순환 큐 구현에 관심이 있을 것입니다
  11. Caching. Redismemcached 와 동일한 방법(manner as memcache)으로 사용할 수 있습니다Redis can be used in the same manner as memcache.

집으로 돌아가는 길은 모델 전쟁에 한없이 종사하지 않을 것이지만, 강력하고 단순한 기본기능을 함께 조합하여 무엇을 만들 수 있는지 보세요. 여러분은 이 모든 동작을 하는 특별한 코드를 작성할 수 있지만, Redis는 구현과 추론을 쉽게 만들어줍니다.

더 자세한 것은 기사를 읽어보세요. 

관련 기사

  • Resque - Redis-backed library for creating background jobs, placing those jobs on multiple queues, and processing them later.
  • Hacker News thread