# 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 |