Redis는 Key/Values구조의 저장을 지원하는 NoSQL 데이터베이스이다. Values를 저장하고 관리할 데이터라 하면,Key는 데이터에 접근할수 있는 식별자를 의미한다. Values에 다양한 자료구조로 데이터를 저장할수 있다.
TTL: 데이터를 특정 기간 동안만 유지하기 위한 명령어, EXPIRE 명령어를 통해 모든 키의 삭제 시간을 설정할 수 있다.
SET mykey "Hello World"
EXPIRE mykey 10
# 결과: mykey는 10초 후에 자동으로 삭제됨
TTL mykey
# 결과: mykey의 남은 시간을 초 단위로 반환 (예: 7)
DEL: 특정 키를 삭제한다.
DEL mykey
UNLINK: DEL과 비슷하지만 비동기적으로 삭제한다. 삭제해야 할 데이터가 많을 경우, 시간 절약을 위해 메모리의 참조 주소를 지우고 나중에 실제 데이터를 삭제한다.
UNLINK mykey
MEMORY USAGE: 특정 키의 메모리 사용량을 확인할 수 있다.
MEMORY USAGE mykey
대표 기본 타입으로 바이너리,문자 데이터를 저장(maximum 512MB),숫자를 저장할경우 증가 감소에 대한 원자적 연산도 지원한다.
SET key1 "Hello"
# key1==key values=="Hello"
SETNX key1 value
GET key1
MGET key1 key2 key3
INCR key1
SET counter 10
INCRBY counter 5
Note: 단순 GET,SET으로 값을 증가시킨다면 공유 변수에 대해 여러 클라이언트의 작업을 처리할때 race condition이 발생할수 있다. 따라서 증가 작업은 원자적 연산을 지원하는 INCR 명령을 사용하도록 한다.
Race condition:두개 이상의 쓰레드가 공유 자원에 접근할때 실행 순서에 따라 최종 결과가 달라질수 있음
DECR key1
Redis에서 Lists는 String 타입의 Linked List 자료구조이다. 이는 Java의 ArrayList와 유사하게 동작하지만, 실제로는 Linked List 형태로 구현되어 있어 Stack이나 Queue를 쉽게 구현할 수 있다.
LPUSH mylist "value1" "value2"
LRANGE mylist 0 2
Stack(후입선출)이나 Queue(선입선출)를 만들 때 Lists 명령어를 활용하여 구현한다.
Redis의 Set은 정렬되지 않은 String 리스트로, 각 요소는 유일한 값을 가져야 한다. 즉, 중복된 값이 허용되지 않으며, 값이 자동으로 중복되지 않도록 관리된다.
SADD myset "value1" "value2"
SREM myset "value1"
SISMEMBER myset "value2"
SMEMBERS myset
SINTER myset1 myset2
SCARD myset
Redis의 Sorted Set은 일반적인 Set처럼 유니크한 값을 보장하면서도, 각 값에 점수(score)를 부여하여 점수를 기준으로 정렬할 수 있는 자료구조이다. 이 특성 덕분에 특정 기준에 따라 순위를 매기거나 정렬된 데이터를 관리할 때 유용하다. 또한, Rate Limit 기능을 구현할 때도 사용된다.
ZADD myzset 10 "value1" 20 "value2"
ZREM myzset "value1"
zrange game:scores 0 +inf byscore limit 0 3 withscores
# byscore:점수를 오름 차순으로 가져온다.(rev를 추가하면 내림차순)
# limit: 두 인자 값으로 인덱스의 범위를 조정한다.
# withscores:key 값과 함께 values 값들도 보여준다.
ZCARD myzset
ZRANK myzset "value2"
ZINCRBY myzset 5 "value1"
#"value1"의 점수를 5만큼 증가시킴
Redis의 Hashes는 field-value 쌍으로 데이터를 저장할 수 있는 컬렉션이다. 이는 Java의 HashMap과 유사한 자료구조로, 구조화된 데이터를 그룹화하여 저장하고 관리하는 데 유용하다. 예를 들어, 사용자 정보(이름, 나이, 주소 등)를 저장할 때 하나의 키에 그룹화하여 관리할 수 있다.
HSET myhash field1 "value1" field2 "value2"
HGET myhash field1
HMGET myhash field1 field2
(HGET==하나의 필드의 값,HMGET==여러 필드 값)
HGETALL myhash
HDEL myhash field1
HINCRBY myhash field3 3
Redis의 Geospatial은 위치 데이터를 저장하고 검색할 수 있는 기능을 제공한다. 위도와 경도 정보를 기반으로 특정 범위 내의 위치를 찾거나, 두 위치 간의 거리를 계산할 때 유용하다. 이를 통해 지도와 관련된 다양한 기능을 구현할 수 있다.
GEOADD places 13.361389 38.115556 "Palermo"
GEOADD places 15.087269 37.502669 "Catania"
GEOSEARCH places FROMLONLAT 13.361389 38.115556 BYRADIUS 200 km
GEODIST places "Palermo" "Catania" km
GEOPOS places "Palermo"
Redis의 Bitmap은 데이터를 비트 단위로 저장하고 조작할 수 있는 자료구조이다. 하나의 키를 사용하여 문자열을 비트 배열로 취급하며, 각 비트는 0 또는 1의 값을 가진다. Bitmap은 주로 플래그 관리나 간단한 집계 작업에 사용된다.
SETBIT mybitmap 5 1
GETBIT mybitmap 5
BITCOUNT mybitmap
Bitmap은 메모리 효율성이 뛰어나며, 특정 조건에 따른 빠른 집계나 상태 추적에 매우 적합하다. 또한, 단순한 비트 연산을 통해 복잡한 계산을 간단하게 수행할 수 있다.