Redis Data type

디하·2024년 7월 3일
0

bucket📦

목록 보기
9/10
post-thumbnail

Redis는 주로 키-값(Key-Value) 데이터 저장소로 사용되는 NoSQL 유형과 비슷하다

key : binary / text
ex) "name","123","#!:()"
권장되는 최대 길이는 512MB

value : 다양한 자료구조로 데이터 타입을 저장할 수 있다



key 명령어

1. TTL (Time TO Live)

1) EXPIRE [KEY][SECOND]
- key: 타임아웃을 설정할 키
- seconds: 키가 만료되기까지의 시간(초)

EXPIRE mykey 60

2) TTL[KEY]
- key: 남은 시간을 확인하고자 하는 키

2. DEL

1) DEL 명령어

DEL 명령어는 지정된 키를 삭제
동기적으로 수행되며, 키가 많은 메모리를 사용하고 있을 경우 삭제하는 데 시간이 걸릴 수 있다
Redis의 메인 스레드에서 실행되므로, 큰 키를 삭제할 때 잠재적으로 성능에 영향을 줄 수 있다

2) UNLINK 명령어
UNLINK 명령어는 DEL 명령어와 유사하게 키를 삭제하지만, 비동기적으로 삭제된다
큰 키를 삭제할 때 Redis의 메인 스레드가 아닌 별도의 백그라운드 스레드를 사용하여 실제 메모리 삭제를 한다
-> 서비스 운영관점에서 더 안정성이 높다

동기적 vs 비동기적

  • 동기적: 동기적 처리는 특정 작업이 완료될 때까지 다른 작업을 대기시키는 방식
    즉, 하나의 작업이 끝나야 다음 작업을 시작할 수 있다. 프로그램은 작업이 완료될 때까지 멈춘 상태로 대기한다
  • 비동기적: 비동기적 처리는 특정 작업이 완료될 때까지 대기하지 않고, 다른 작업을 동시에 처리할 수 있는 방식
    작업이 완료되면 별도로 알림을 받아 처리할 수 있다 프로그램의 응답성을 높이고, 효율성을 증가시킨다

3. MEMORY USAGE

MEMORY USAGE 명령어는 특정 키가 차지하는 메모리 양을 바이트 단위로 반환한다
레디스 데이터베이스에서 특정 데이터 구조가 얼마나 많은 메모리를 사용하고 있는지 파악할 수 있게 해준다

Data Type


1. Strings

  • 대표 기본 타입
  • 바이너리, 문자 데이터를 저장
    - maximum 512MB
  • 증가 감소에 대한 원자적 연산
    - increment/ decrement
  • 명령어
SET 
SETNX
GET
MGET
INC
DEC

1) SET 명령어

SET 명령어는 지정된 키에 값을 저장

SET key value
ex) SET mykey "Hello"

2) SETNX 명령어

SETNX(SET if Not Exists)는 키가 존재하지 않을 때만 값을 설정

SETNX key value
ex) SETNX mykey "Hello"

3) GET 명령어

GET 명령어는 지정된 키의 값을 가져온다

GET key
ex) GET mykey

4) ⚡️ MGET 명령어

MGET 명령어는 여러 키의 값을 동시에 가져온다

MGET key1 key2 ... keyN
ex) MGET key1 key2

5) INCR 명령어

INCR 명령어는 지정된 키의 값을 정수로 해석하여 1 증가

INCR key
ex) INCR counter

6) DECR 명령어

DECR 명령어는 지정된 키의 값을 정수로 해석하여 1 감소

DECR key
ex: DECR counter

2. Lists

Redis의 Lists는 삽입된 순서를 유지하는 데이터 구조로, 명령어를 통해 리스트의 양 끝에서 요소를 추가하거나 제거할 수 있다

  • Linked List (strings)
    - ex) Java ArrayList
  • Queue, Stack
  • LPUSH key value [value ...]: 리스트의 왼쪽에 하나 이상의 값을 삽입
  • RPUSH key value [value ...]: 리스트의 오른쪽에 하나 이상의 값을 삽입
  • LPOP key: 리스트의 왼쪽 끝 요소를 제거하고 반환
  • RPOP key: 리스트의 오른쪽 끝 요소를 제거하고 반환
  • LRANGE key start stop: 지정된 범위 내의 요소를 반환
    - 최근 작성 포스팅, 데이터 개수 불러올때 사용
  • LLEN key: 리스트의 길이를 반환


LPUSH 로 리스트 왼쪽에 {id:100} 삽입
RPUSH 로 리스트 오른쪽에 {id:200} 삽입

LRANGE 로 0 1 을 불러오면
순서대로 출력되는것을 볼 수 있다

LRANGE key 0 -1 : 전체를 조회한다 -> 0에서 가장 마지막 (-1: 역으로 봤을때 가장 마지막수는 -1)


LPOP RPOP 키로 제거 하면서 조회도 가능하다

3. Sets

Redis의 Sets는 중복 없는 문자열의 집합을 저장하는 데이터 구조Sets는 원소의 유일성을 보장하며 다양한 집합 연산을 지원
-> UNIQUE 한 값을 보장하는 것이 특징

Unordered collection(unique strings)
- ex) java set
Unique item
- SNS follow
- Blacklist
- Tags

  • SADD key member [member ...]: 하나 이상의 요소를 집합에 추가
  • SREM key member [member ...]: 하나 이상의 요소를 집합에서 제거
  • SISMEMBER key member: 특정 요소가 집합에 존재하는지 확인
  • SMEMBERS key: 집합의 모든 요소를 반환
  • SCARD key: 집합의 크기(요소의 수)를 반환
  • SDIFF key [key ...]: 하나 이상의 집합 간의 차집합을 반환
  • SINTER key [key ...]: 하나 이상의 집합 간의 교집합을 반환
  • SUNION key [key ...]: 하나 이상의 집합 간의 합집합을 반환

SADD 로 요소를 추가하는데
밑에 0으로 반환되는 값들을 보면, 위에 값들과 중복된 값이므로 추가가 되지 않기 때문에 0으로 반환된다

4. Sorted Sets

Redis의 Sorted Sets는 중복 없는문자열의 집합을 저장하면서 각 요소에 점수(score)를 할당하여 자동으로 정렬하는 데이터 구조 순위나 순서가 중요한 데이터 관리에 유용

  • ZADD key score member [score member ...]: 하나 이상의 요소와 점수를 추가
  • ZSCORE key member: 특정 요소의 점수를 반환
  • ZRANK key member: 특정 요소의 순위를 반환합니다(오름차순)
  • ZREVRANK key member: 특정 요소의 순위를 반환합니다(내림차순)
  • ZRANGE key start stop [WITHSCORES]: 주어진 범위 내의 요소를 반환 (6.2 버전 부터 전체 집합 뿐 아니라 내림차순 오른차순 순위에 따라 요소를 반환할 수 있음)
  • ZREVRANGE key start stop [WITHSCORES]: 주어진 범위 내의 요소를 내림차순으로 반환
  • ZREM key member [member ...]: 하나 이상의 요소를 삭제
  • ZCOUNT key min max: 주어진 점수 범위 내의 요소 개수를 반환
  • ZINCRBY key increment member: 요소의 점수를 증가
  • ZRANGEBYSCORE key min max [WITHSCORES][LIMIT offset count]: 점수 범위 내의 요소를 반환

값과 관련된 value 를 저장한다


index 정보와 score 정보를 함께 조회할 수 있다 (오름차순)

1) byscore 점수조건 0 부터 inf(무한대) 기준으로 하위 3위까지 출력
2) byscore 점수조건 0 부터 inf(무한대) 기준으로 상위 3위까지 출력 -> rev: 내림차순

4. Hashes

Redis Hashes는 필드-값(field-value) 쌍을 저장하는 데이터 구조로 (그룹화), 하나의 키(key) 아래 여러 필드와 값을 저장할 수 있어 관계형 데이터베이스의 행(row)과 비슷한 개념

  • HSET key field value: 주어진 키에 필드와 값을 설정
  • HGET key field: 주어진 키의 특정 필드 값을 가져온다
  • HGETALL key: 주어진 키의 모든 필드와 값을 가져온다
  • HDEL key field [field ...]: 주어진 키에서 하나 이상의 필드를 삭제
  • HEXISTS key field: 특정 필드가 존재하는지 확인
  • HLEN key: 주어진 키의 필드 개수를 반환
  • HINCRBY key field increment: 특정 필드 값을 주어진 값만큼 증가

users : 1000
name : lee
email : lee @ email
age:20

5. Geospatial

Redis Geospatial 기능은 위치 기반 데이터를 다루기 위한 기능을 제공 , 위경도의 위치를 저장할 수 있다
특정 위치(지리 좌표)를 키에 저장하고 이를 이용한 다양한 연산을 할 수 있음 GPS 좌표를 다루는 응용 프로그램에서 사용

  • GEOADD key longitude latitude member: 지정된 키에 지리 좌표(longitude, latitude)와 해당 위치를 나타내는 멤버(member)를 추가

  • GEODIST key member1 member2 [unit]: 두 멤버 간의 거리(단위 선택 가능)를 반환

  • GEOHASH key member [member ...]: 지정된 멤버의 지오해시 값을 반환

  • GEOPOS key member [member ...]: 지정된 멤버의 지리 좌표를 반환

  • GEORADIUS key longitude latitude radius m|km|ft|mi: 주어진 중심 좌표에서 특정 반경 내에 있는 모든 멤버를 반환

  • GEORADIUSBYMEMBER key member radius m|km|ft|mi: 특정 멤버를 중심으로 지정된 반경 내에 있는 모든 멤버를 반환

  • GEOSEARCH (6.2버전이상) : 위경도 정보를 조회

GEOADD locations 13.361389 38.115556 "Palermo"
GEOADD locations 15.087269 37.502669 "Catania"
GEODIST locations "Palermo" "Catania" km
# 결과: "166.2742"
GEOHASH locations "Palermo" "Catania"
# 결과: ["sqc8b49rny0", "sqdtr74hyu0"]
GEOPOS locations "Palermo" "Catania"
# 결과: [["13.36138933897018433", "38.11555639549629859"], ["15.08726745843887329", "37.50266842333162032"]]
GEORADIUS locations 15 37 200 km
# 결과: ["Catania", "Palermo"]
GEORADIUSBYMEMBER locations "Palermo" 200 km
# 결과: ["Palermo", "Catania"]
  • 위치 기반 서비스: 사용자의 위치를 기반으로 근처의 상점, 레스토랑 등을 검색
  • 물류 및 배달 서비스: 배달 경로 최적화 및 근처 배달원 찾기.
  • 지도 및 내비게이션: 특정 위치를 중심으로 반경 내의 관심 지점 찾기

6. Bitmap

Redis Bitmaps는 비트 기반의 데이터 구조를 지원하여, 비트의 집합을 저장하고 조작할 수 있다
주로 비트 플래그 또는 상태를 효율적으로 관리할 때 사용

  • 0 또는 1의 값으로 이루어진 비트열
  • 메모리를 적게 사용하여 대량의 데이터 저장에 유용
  • SETBIT key offset value: 지정된 키의 오프셋 위치에 비트 값을 설정합니다.

    SETBIT mykey 7 1

    이 명령은 mykey의 7번째 비트를 1로 설정

  • GETBIT key offset: 지정된 키의 오프셋 위치에 있는 비트 값을 가져옵니다.

    GETBIT mykey 7

    이 명령은 mykey의 7번째 비트 값을 반환

  • BITCOUNT key [start end]: 지정된 범위 내에서 비트가 1인 비트의 개수를 계산합니다.

    BITCOUNT mykey

    이 명령은 mykey의 전체 비트 중 1인 비트의 개수를 반환

  • BITOP operation destkey key [key ...]: 비트 연산을 수행하여 결과를 destkey에 저장합니다. 연산은 AND, OR, XOR, NOT이 있다

    BITOP AND resultKey key1 key2

    이 명령은 key1key2의 비트를 AND 연산하여 resultKey에 저장

  • BITPOS key bit [start][end]: 지정된 비트 값이 처음으로 나타나는 위치를 반환

    BITPOS mykey 1

    이 명령은 mykey에서 비트 1이 처음 나타나는 위치를 반환

예시:

SETBIT users:active 0 1
SETBIT users:active 1 0
SETBIT users:active 2 1
SETBIT users:active 3 1
GETBIT users:active 2
# 결과: 1
BITCOUNT users:active
# 결과: 3
BITOP AND result users:active anotherbitmap
BITPOS users:active 1
# 결과: 0
  • 사용자 활동 추적: 매일의 사용자 활동을 비트맵으로 저장하여 빠르고 효율적으로 활동 여부를 확인
  • 플래그 관리: 여러 상태 플래그를 비트로 저장하여 메모리 절약
  • 데이터 압축: 비트 단위로 데이터를 저장하여 공간 효율성을 극대화
profile
🖥️ ⌨️🖱️🩵

0개의 댓글

관련 채용 정보