우선, 레디스는 관계형 데이터베이스가 아니다. 레디스는 RDB와 달리 데이터 타입(VARCHAR, INT, DATETIME) 등을 지원하지 않는다. 오직 몇 가지 로우 레벨의 데이터 타입을 지원한다.
거의 대부분의 데이터를 문자열로 표현한다. 가령 숫자나 날짜 및 시간 등을 문자열로 저장한다고 생각하면 된다.
해시는 필드를 가질 수 있다. 예를 들어 사용자 정보라는 해시가 있다면 이메일과 닉네임을 가질 수 있다. 해시는 전체를 가져오거나 개별 필드를 가져올 수 있다.
리스트는 가장 많이 아는 연결 리스트(Linked List)이다. 배열의 안쪽, 오른쪽에 엘리먼트를 추가할 수 있다. 리스트 안의 데이터는 문자열만 가능하다.
셋은 리스트와 유사한 특징을 보이지만 고유 값(Distinct value)을 저장한다는 점에서 차이점이 있다.
고유 값이 이미 정해진 셋에는 고유 값에 해당하는 멤버를 생성할 수 없다. 또한 셋은 정렬을 할 수 있다. (Sorted Set) 정렬을 통해서 특정 기준 값에 들어온 데이터만 필터링하는게 가능하다.
RDB는 로우가 많아지면 검색 속도가 느려지고 인덱스를 두거나 프리머리 키(Primary Key), 포린 키(Foreign Key) 등을 설정해 사용한다. 반면, 레디스는 O(1)의 수행시간을 가지고, 많은 키건 적은 키건 스키마가 많건 적건 동일한 시간이 사용된다.
강점이 뚜렷한 만큼 주의해야 할 점도 분명히 있다.
바로, Redis는 한 번 생성한 키를 선택적으로 삭제하기 어렵다.
특별한 조치를 취하지 않으면 레디스의 키는 영구 보관되며 심지어 서버를 종료했다가 다시 켜도 상태가 유지 된다.
FLUSHDB 명령어를 통해 모든 키를 파괴한다. 복구가 불가능하며 보통 개발 수준에서만 쓰인다.
각각의 키를 저장할 때 Set에 저장해 특정 시간이나 조건에 따라 삭제하는 방법이다. 이 방법은 실제 삭제를 한다기보단 밀어내기를 한다고 이해할 수 있다. Set은 하나의 키에 대해 여러 번 등록을 해도 하나의 데이터만 남게 됩니다. 이러한 특징과 더불어 Set은 교집합, 차집합, 합집합 같은 기능을 제공합니다. 두 가지 특징을 활용해 교차되는 키만 남기거나 뺀 연산을 적용해 키를 삭제 할 수 있다.
가장 많이 사용되는 방법이다. 키를 추적할 필요도 없고, 쉽게 관리 할 수 있다. 이 방식을 사용할 때는 키-값을 SET 커맨드로 저장해 EXPIRE 커맨드로 기간 만료 시간을 정하는 방법을 사용한다. 또는 레디스 버전 2.0.0 이상을 사용할 때 SETEX 커멘드를 사용하는 방법이다. SETEX방법은 SET과 EXPIRE를 합친 것과 같다.