블로그는 나의 힘!
[ Programing ]/Redis2023. 3. 2. 10:08

# Strings
  - key-value
    Strings는 key와 value가 일 대 일 관계.
    반면 Lists, Sets, Sorted Sets, Hashes는 일 대 다 관계.
  - Key/Value Data type: Binary-safe strings
    바이너리-안전 문자열은 알파벳, 숫자, 한글, 이미지 등을 사용할수 있다는 의미.
    즉, value 뿐만 아니라 key도 위에 언급한 것들을 사용할 수 있음.
  - key/value maximum length: 512 megabytes
    key와 value 모두 최대 길이는 512MB.
  - key design
    적절한 key 사이즈를 유지하는 것이 좋음.
    사용자 보기 관점: "user_1000_email"
    메모리 절약 관점: "u1000e"
    key를 구성할때 단어 사이에 구분자를 사용하는 것이 좋음.
    예를 들어 '_' 등을 사용해서 key를 구성하면 쉽게 알아볼 수 있음.
    특히, Enterprise 버전에서 SQL(select) 사용을 고려한다면 다른 구분자보다 '_' 사용을 추천.
  - 명령어 요약
      SET: SET, SETNX, SETEX, SETPEX, MSET, MSETNX, APPEND, SETRANGE
      GET: GET, MGET, GETRANGE, STRLEN
      INCR: INCR, DECR, INCRBY, DECRBY, INCRBYFLOAT
      Enterprise: SETS, DELS, APPENDS (subquery)

SET : 저장
SETS (subquery) : (Ent) Subquery(서브쿼리) 기능
DEL : key를 삭제
DELS (subquery) : (Ent) Subquery(서브쿼리) 기능
GET : 데이터 조회
GETEX : (6.2) 데이터 조회와 만료 시간 설정
GETDEL : (6.2) 데이터 조회와 삭제
INCR : 1씩 증가
DECR : 1씩 감소
INCRBY : 지정한 숫자(정수) 만큼 증가
DECRBY : 지정한 숫자(정수) 만큼 감소
INCRBYFLOAT : 지정한 숫자(정수/유리수) 만큼 증가
SETNX : 동일한 key가 없을 경우에만 저장
SETEX : 지정한 시간 이후에 데이터 지워짐: 초 단위 지정
PSETEX : 지정한 시간 이후에 데이터 지워짐: 1/1000초 단위 지정
MSET : 여러개의 데이터를 한번에 저장
MGET : 여러개의 데이터를 한번에 조회
MSETNX : 여러개의 데이터를 한번에 저장.  key가 없을 경우에만 저장
APPEND : 저장/추가. 기존 키에 값 추가하거나, 키가 없는 경우 SET 명령과 동일 저장
APPENDS (subquery) : (Ent) Subquery(서브쿼리) 기능
STRLEN : 데이터의 바이트수를 리턴
SETRANGE : 위치 지정해서 데이터 쓰기
GETRANGE : 데이터의 일부 문자열을 조회
STRALGO : 두 문자열이 얼마나 유사한지 평가
GETSET : 조회와 저장을 한번에



# Lists
  - Lists는 key와 value가 일 대 다 관계.
  - value는 입력된 순서대로 저장.
  - Lists는 주로 큐(Queue)와 스택(Stack)으로 사용.
  - 큐(Queue)는 들어오는 데이터를 순서대로 처리할때 사용.
  - 스택(Stack)은 웹브라우져의 백버튼 처럼 주로 되돌아 갈때 사용.
  - 키(리스트)의 생성과 삭제
    value 저장되면 키(리스트)는 생성됩니다. key에 value 하나도 없으면 키는 삭제.
    즉, key(리스트)의 생성과 삭제를 위한 별도의 작업은 필요없음.

  - 명령어 요약
      SET (PUSH): LPUSH, RPUSH, LPUSHX, RPUSHX, LSET, LINSERT, RPOPLPUSH
      GET: LRANGE, LINDEX, LLEN
      POP: LPOP, RPOP, BLPOP, BRPOP
      REM: LREM, LTRIM
      BLOCK: BLPOP, BRPOP, BRPOPLPUSH
      Enterprise: LREVRANGE, LPUSHS, RPUSHS (subquery)

LPUSH : 리스트의 왼쪽에 데이터를 저장
LPUSHS (subquery) : (Ent) Subquery(서브쿼리) 기능
RPOP : 리스트 오른쪽에서 데이터를 꺼내옴
LPOP : 리스트 왼쪽에서 데이터를 꺼내옴
RPUSH : 리스트의 오른쪽에 데이터를 저장
RPUSHS (subquery) : (Ent) Subquery(서브쿼리) 기능
LRANGE : 인덱스로 범위를 지정해서 리스트 조회
LLS : (Ent) 패턴(pattern)으로 값(value) 조회
LREVRANGE : (Ent) 인덱스로 범위를 지정해서 역순(오른쪽에서 왼쪽으로)으로 리스트 조회
LLEN : 리스트에서 value의 개수를 조회
LINDEX : 인덱스로 특정 위치의 데이터를 조회
LPOS : (6.0.6) 값으로 인덱스를 조회
LSET : 인덱스로 특정 위치의 데이터를 바꿈
LINSERT : 값으로 특정 위치에 데이터 넣기
LREM : 값으로 삭제
LRM : (Ent) 패턴(pattern)으로 값(value) 삭제
LTRIM : 인덱스로 지정한 범위 밖의 데이터를 삭제
LMOVE : (6.2) 리스트간 데이터 이동
RPOPLPUSH : 리스트 오른쪽에서 데이터를 꺼내서 왼쪽에 넣는다.
LPUSHX : 키가 이미 있을 경우에만 리스트의 왼쪽에 데이터를 저장
RPUSHX : 키가 이미 있을 경우에만 리스트의 오른쪽에 데이터를 저장
BLPOP : 데이터가 들어오면 리스트의 왼쪽에서 꺼내옴
BRPOP : 데이터가 들어오면 리스트의 오른쪽에서 꺼내옴
BLMOVE : (6.2) 리스트간 데이터 이동 - 대기
BRPOPLPUSH : 데이터가 들어오면 리스트 오른쪽에서 데이터를 꺼내서 왼쪽에 넣는다.



# Sets
  - Sets는 key와 value가 일 대 다 관계.
  - Value는 입력된 순서와 상관없이 저장되며, 중복되지 않음. 
    즉, value A가 2번 저장되도 결과적으로 하나만 남게 됨
  - Sets에서는 집합이라는 의미에서 value를 member라 부름.
  - Sets은 주로 카드게임같은 게임이나, 집합연산이 필요한 곳에 사용.
  - 명령어 요약
      SET: SADD, SMOVE
      GET: SMEMBERS, SCARD, SRANDMEMBER, SISMEMBER, SSCAN
      POP: SPOP
      REM: SREM
      집합연산: SUNION, SINTER, SDIFF, SUNIONSTORE, SINTERSTORE, SDIFFSTORE
      Enterprise: SLS, SRM, SLEN, SADDS (subquery)

SADD : 집합에 데이터를 추가
SADDS (subquery) : (Ent) Subquery(서브쿼리) 기능
SREM : 집합에 member를 삭제
SRM : (Ent) 패턴(pattern)으로 값(value) 삭제
SMEMBERS : 집합에 데이터를 조회
SLS : (Ent) 패턴(pattern)으로 값(value) 조회
SCARD : 키에 속한 멤버 개수를 리턴
SLEN : (Ent) 키에 속한 멤버 개수를 리턴
SUNION : 합집합을 구함
SINTER : 교집합을 구함
SDIFF : 차집합을 구함
SUNIONSTORE : 합집합을 구해서 새로운 집합에 저장
SINTERSTORE : 교집합을 구해서 새로운 집합에 저장
SDIFFSTORE : 차집합을 구해서 새로운 집합에 저장
SISMEMBER : 집합에 member가 존재하는지 확인
SMISMEMBER : (6.2) 집합에 member가 존재하는지 확인 - 여러 개 가능
SMOVE : 소스 집합의 member를 목적 집합으로 이동
SPOP : 집합에서 무작위로 member를 가져옴
SRANDMEMBER : 집합에서 무작위로 member를 조회
SSCAN : member를 일정 단위 개수 만큼씩 조회



# Sorted Sets (ZSets)
  - Sorted Sets는 key 하나에 여러개의 score와 value로 구성.
  - Value는 score로 sort되며 중복되지 않음.
  - score가 같으면 value로 sort됨.
  - Sorted Sets에서는 집합이라는 의미에서 value를 member라 부름.
  - Sorted Sets은 주로 sort가 필요한 곳에 사용.
  - 명령어 요약
      SET: ZADD
      GET: ZRANGE, ZRANGEBYSCORE, ZRANGEBYLEX, ZREVRANGE, ZREVRANGEBYSCORE,
               ZREVRANGEBYLEX, ZRANK, ZREVRANK, ZSCORE, ZCARD, ZCOUNT, ZLEXCOUNT, ZSCAN

      POP: ZPOPMIN, ZPOPMAX
      REM: ZREM, ZREMRANGEBYRANK, ZREMRANGEBYSCORE, ZREMRANGEBYLEX
      INCR: ZINCRBY
      집합연산: ZUNIONSTORE, ZINTERSTORE
      Enterprise: ZISMEMBER, ZLS, ZRM, SLEN, SADDS (subquery)

ZADD : 집합에 데이터를 score와 함께 추가
ZADDS (subquery) : (Ent) Subquery(서브쿼리) 기능
ZINCRBY : score 증가, 감소
ZRANGE : member list를 조회(적은것 부터)
ZRANGESTORE : (6.2) 조회해서 다른 키에 저장
ZLS : (Ent) 패턴(pattern)으로 값(value) 조회
ZREVRANGE : member list를 조회(큰 것 부터)
ZRANGEBYSCORE : score로 범위를 지정해서 조회
ZREVRANGEBYSCORE : score로 범위를 지정해서 역순으로 조회
ZRANGEBYLEX : member로 범위를 지정해서 조회
ZREVRANGEBYLEX : member로 범위를 지정해서 역순(큰 것부터) 조회
ZCARD : 키에 속한 멤버 개수를 리턴
ZLEN : (Ent) 키에 속한 멤버 개수를 리턴
ZLEXCOUNT : member로 범위를 지정해서 개수를 리턴
ZRANK by index : member의 index(rank)를 리턴
ZREVRANK : member를 역순으로 index(rank)를 리턴
ZSCORE : member의 score를 리턴
ZMSCORE : (6.2) member의 score를 리턴 - 여러 개 가능
ZREM : member 삭제
ZRM : (Ent) 패턴(pattern)으로 값(value) 삭제
ZREMRANGEBYRANK : index 범위로 member를 삭제
ZREMRANGEBYSCORE : score로 범위를 지정해서 member 삭제
ZREMRANGEBYLEX : member로 범위를 지정해서 삭제
ZUNION : (6.2) 합집합을 구함
ZINTER : (6.2) 교집합을 구함
ZDIFF : (6.2) 차집합을 구함
ZCOUNT by score : score로 범위를 지정해서 개수 조회
ZUNIONSTORE : 합집합을 구해서 새로운 집합에 저장
ZINTERSTORE : 교집합을 구해서 새로운 집합에 저장
ZDIFFSTORE : (6.2) 차집합을 구해서 새로운 집합에 저장
ZSCAN : score, member를 일정 단위 개수 만큼씩 조회
ZPOPMIN : (5.0) 작은 값부터 꺼내온다
ZPOPMAX : (5.0) 큰 값부터 꺼내온다
BZPOPMIN : (5.0) 데이터가 들어오면 작은 값부터 꺼내온다
BZPOPMAX : (5.0) 데이터가 들어오면 큰 값부터 꺼내온다
ZISMEMBER : (Ent) 집합에 member가 존재하는지 확인
ZRANDMEMBER : (6.2) 임의(random)의 멤버를 조회



# Hashes
  - Field와 value로 구성
    Hashes는 key 하나에 여러개의 field와 value로 구성.
    key 하나에 field와 value 쌍을 40억개(4,294,967,295)까지 저장 가능.
  - Table과 Hash의 유사한 점
     Hashes가 field와 value로 구성된다는 면에서 RDB의 table과 비슷.
     Hash key는 table의 PK, field는 column, value는 value로 보면 됨.
     Key가 PK와 같은 역할을 하기 때문에 key 하나는 table의 한 row와 같음.
  - Table과 Hash의 다른 점
     Table의 column 수는 일반적으로 제한이 있는 반면, Hash의 field 수는 40억개로 무제한에 가깝다.
     Table에서 column을 추가하려면 alter문으로 미리 table을 변경해야 하나, 
     Hash에서는 그런 사전 작업이 필요없습니다. 따라서 field의 추가/삭제는 자유롭다. 
     Field의 추가/삭제는 해당 key에만 영향을 준다.

  - 명령어 요약
      SET: HSET, HMSET, HSETNX
      GET: HGET, HMGET, HLEN, HKEYS, HVALS, HGETALL, HSTRLEN, HSCAN, HEXISTS
      REM: HDEL
      INCR: HINCRBY, HINCRBYFLOAT

HSET : field 와 value를 저장
HDEL : field와 value를 삭제
HGET : field로 value를 조회
HLEN : field의 개수를 조회
HMSET : 여러개의 field, value를 저장
HMGET : 여러개의 value를 조회
HKEYS : key에 속한 모든 field name을 조회
HVALS : key에 속한 모든 value를 조회
HGETALL : key에 속한 모든 field와 value를 조회
HSTRLEN : value의 길이(byte)를 조회
HINCRBY : value를 increment 만큼 증가 또는 감소
HINCRBYFLOAT : value를 float 만큼 증가 또는 감소
HEXISTS : field가 있는지 조회
HSETNX : field가 기존에 없으면 저장
HSCAN : field, member를 일정 단위 개수 만큼씩 조회
HRANDFIELD : (6.2) 임의(random)의 필드를 조회
HSETS (subquery) : (Ent) Subquery(서브쿼리) 기능
HRM : (Ent) 필드명에 패턴(pattern)으로 필드/값(value) 삭제
HLS : (Ent) 필드명에 패턴(pattern)으로 필드/값(value) 조회





참고 : Redis Introduction (redisgate.kr)
 

'[ Programing ] > Redis' 카테고리의 다른 글

Redis 레퍼런스.  (0) 2024.05.21
[Linux] Redis Cluster 설정  (0) 2022.10.20
[Linux] Redis wget 설치  (0) 2022.10.20
Redis 명령어  (0) 2021.04.21
Posted by Mister_Q