[Redis] Redis Data Type "String"

2019. 5. 27. 19:41Redis

이번에는 Redis의 Data Type인 String에 대해 알아보겠습니다 . 

 

Strings are the most basic kind of Redis value. Redis Strings are binary safe, this means that a Redis string can contain any kind of data, for instance a JPEG image or a serialized Ruby object.

A String value can be at max 512 Megabytes in length.

You can do a number of interesting things using strings in Redis, for instance you can:

  • Use Strings as atomic counters using commands in the INCR family: INCR, DECR, INCRBY.
  • Append to strings with the APPEND command.
  • Use Strings as a random access vectors with GETRANGE and SETRANGE.
  • Encode a lot of data in little space, or create a Redis backed Bloom Filter using GETBIT and SETBIT.

Check all the available string commands for more information, or read the introduction to Redis data types.

 

https://redis.io/topics/data-types

 

Data types – Redis

*Data types *Strings Strings are the most basic kind of Redis value. Redis Strings are binary safe, this means that a Redis string can contain any kind of data, for instance a JPEG image or a serialized Ruby object. A String value can be at max 512 Megabyt

redis.io

Redis 의 공식홈페이지에 있는 Data Type String에 대한 설명입니다 . 

Redis에서의 String은 가장 기본적인 유형의 값이다 . 

String에는 JPEG 이미지 or 직렬화된 객체와 같은 모든 데이터를 포함할 수 있다 . 

String 의 데이터 최대 크기는 512MB입닌다 . 

String은 문자열이지만 숫자도 저장이 가능하다 또한 incr , incrby , decr , decrby와 같은 automic counter 연산이 가능하다 . 

 

Stroing에는 24가지의 Command가 지원된다 24가지를 다 하려고 한다면 너무 많으니 핵심적으로 쓰는 Command를 위주로 설명을 하도록 하겠습니다 . 

 

SET , GET


SET와 GET 은 말 그대로 값을 SET하고 값을 GET할때 사용하는 String Commant 입니다. 실습에 대한 예제는 localhost에서 동작한 결과입니다 . 

 

SET , GET COMMAND

SET을 통해 NAME이라는 KEY로 "YUNJIN CHOI"라는 VALUE를 저장하고 

그다음 GET Command를 통해 NAME이라는 KEY값을 불러오는 예제입니다 . 

주의 해야할 점은 Redis 의 KEY는 대,소문자를 구분하기 때문에 대소문자 오탈자가 없는지 확인해주시기 바랍니다 . 

이 외에에도 Options로 EX , PX , NX , XX가 존재합니다

 

  • EX seconds -- Set the specified expire time, in seconds.
  • PX milliseconds -- Set the specified expire time, in milliseconds.
  • NX -- Only set the key if it does not already exist.
  • XX -- Only set the key if it already exist.

Redis 공식 홈페이지에 있는 SET Option 입니다 . 한글로 번역해서 확인하면 다음과 같습니다 . 

EX seconds 는 SET KEY VALUE EX seconds 와 같이 사용하면 됩니다 . KEY에게 만료시간을 주고 해당 만료시간(초) 가 지나면 KEY가 삭제가 됩니다 . 

 

PX milliseconds는 SET KEY VALUE PX milliseconds 와 같이 사용하며 만료시간을 밀리초 단위로 설정합니다 .

 

NX는 해당되는 키가 없는 경우에만 KEY를 설정합니다 이말은 이미 기존에 KEY VALUE가 있다면 기존의 VALUE를 수정하지 않는다는 말입니다 . 

 

XX는 NX와 반대로 키가 이미있는 경우에만 설정하는 옵션입니다 .  이말은 즉 , 키가 없다면 키생성을 하지 않고 키가 있다면 수정을 하게 됩니다 . 

 

 

INCR , INCRBY , DECR  , DECRBY


INCR , INCRBY , DECR ,DECRBY는  증가 or 감소와 관련된 Command입니다 . 

INCR은 키에 저장된 수를 1씩 증가시키고 키가 존재하지 않으면 1을 증가시키기 전에 해당 KEY값을 0으로 초기화를 합니다 . 

DESC은 1씩 감소합니다 나머지는 INCR과 같습니다.

 

그렇다면 뒤에 BY가 붙었다면 어떤 행동을할까요. 그것은 1씩 증가하는게 아닌 사용자가 지정해준 값만큼 증가 or 감소 시킬수가 있습니다 . 예제로 확인해 보도록 하겠습니다 . 

 

주의할 점은 해당 KEY에 대한 값이 정수로 표시할수 없는 문자열을 포함하고있으면 안된다는 점입니다 . 

 

SET과 INCR 사용 

INCR을 통해 AGE를 사용했을시 26 에서 27로 변하여 저장된것 을 확인할 수 있습니다 . 

DECR를 사용한 예

DECR을 통해 INCR을 사용하여 1을 증가시킨 AGE를 사용했을때 1이 감소하는것을 확인할 수 있습니다 . 

INCRBY , DECRBY를 사용한 예

 

INCRBY , DECRBY는 간단하게 설명하고 넘어가겠습니다 다음과 같이 KEY의 뒤에 증가할만큼의 숫자만큼 암력해 주시면 됩니다 . 

 

 

MGET , MSET


MGET 과 MSET은 기존의 GET , SET과 비슷하지만 다른점은 지정된 모든키의 값을 가져오고 , 지정된 모든 키를 각각의 값으로 저장한다는점의 차이가있습니다 . 

 

MGET , MSET

MSET을 통해 A :65 , B : 66 , C : 67의 값을 저장하였고 keys *를 통해 KEY들을 확인해보면 3개가 저장된것을 볼수있고 MGET을 통하여 3개의 값들을 동시에 가져올 수 있습니다.

 

참고할 내용은 MGET은 입력된 모든 KEY에 대한 값을 반환하기때문에 보유하지 않거나 존재하지 않는 모든키에대해서는 nil이라는 값으로 리턴한다 따라서 작업이 실패하지 않습니다 , 그리고 MSET은 SET과 마찬가지로 기존값을 새값으로 바꾼다 . 기존 값을 덮어쓰지 않으려면 MSETNX Command를 참고하면 된다 . 

 

STRLEN


STRLEN Command는 KEY에 저장된 값에 대한 길이를 Return 해줍니다 . 

STRLEN

NAME이라는 KEY에는 YUNJIN CHOI 값이 저장되어있으며 STRLEN을 하여 KEY조회시 11이라는 RETURN 값을 볼 수 있습니다 (스페이스 값 포함) 만약 STRLEN을하였는데 해당 KEY가 없다면 0 이 출력됩니다.

 

 

APPEND


APPEND Command는 key가 이미 있고 문자열인 경우 기존에 있던 문자열의 끝에 문자열을 추가해 준다 .

만약 Key가존재 하지 않는다면 빈 String을 생성하여 APPEND하게 된다.

APPEND

다음과 같이 NAME이라는 Key는 존재 하지 않았지만 APPEND 시 길이 6의 문자열이 추가된것을 확인할 수 있으며 최종적으로는 저의 이름이 APPEND되어 출력된것을 확인할 수 있습니다 .

 

 

 

String Data Type은 이정도만 정리하고 넘어가도록 하겠습니다 . 실제 String Command에는 다양한 동작을 하는 Command들이 많이있습니다. 저는 가장 기본적은것들을 위주로 했기때문에 더 궁금한 Command들은 공식 홈페이지에서 확인하시면 좋을것 같습니다 .