Redis Strings

Redis Strings (Redis Strings)

이번엔 Redis에서 가장 기본적이면서도 가장 많이 쓰이는 데이터 타입, Strings를 배워볼게요. Redis 키 자체도 문자열이고, 값으로도 문자열을 쓸 수 있어요. 그래서 "문자열을 문자열에 매핑하는" 구조인 셈이죠. 단순해 보이지만 캐시, 카운터, 비트 연산까지 폭넓게 쓸 수 있어요.

출처: Redis 공식 문서 — strings-2

Strings란 무엇인가?

Redis Strings는 바이트 시퀀스를 저장해요. 텍스트뿐 아니라 직렬화된 객체, 바이너리 배열까지 담을 수 있죠. 그래서 Redis 키에 연결할 수 있는 가장 단순한 값 타입이에요.

주로 캐싱에 쓰이지만, 그 외에도 카운터를 구현하거나 비트 연산(bitwise operations) 을 수행하는 등 추가 기능을 지원해요. HTML 조각이나 페이지를 캐시하는 등 다양한 용도에 유용하답니다.

값의 크기 제한 (Limits)

값은 모든 종류의 문자열(바이너리 데이터 포함)일 수 있어요. 예를 들어 JPEG 이미지를 값 안에 저장할 수 있죠. 다만 값의 크기는 기본적으로 최대 512MB를 넘을 수 없어요.

기본 명령 (Basic commands)

값 설정과 조건부 설정

간단한 SET/GET 외에도, 키가 없을 때만(NX) 혹은 키가 있을 때만(XX) 설정하는 조건부 옵션을 쓸 수 있어요.

> set bike:1 bike nx
(nil)
> set bike:1 bike xx
OK
  • NX 옵션: 키가 없을 때만 설정. 이미 값이 있으면 (nil)이 반환돼요.
  • XX 옵션: 키가 있을 때만 설정. 값이 바뀌면 OK가 반환돼요.

여러 키 한 번에: MSET / MGET

여러 키를 한 번에 설정하고 읽을 수 있어요.

> mset bike:1 "Deimos" bike:2 "Ares" bike:3 "Vanth"
OK
> mget bike:1 bike:2 bike:3
1) "Deimos"
2) "Ares"
3) "Vanth"

카운터로 쓰기 (Strings as counters)

문자열은 원자적으로 증가/감소시킬 수 있어요. INCR, INCRBY, DECR, DECRBY 같은 명령이 그 역할을 해요.

> set total_crashes 0
OK
> incr total_crashes
(integer) 1
> incrby total_crashes 10
(integer) 11

이 명령들은 원자적(atomic) 으로 동작하기 때문에, 여러 클라이언트가 동시에 증가시켜도 값이 꼬이지 않아요. 조회수, 좋아요, 접속 카운트 같은 것에 딱이죠.

비트 연산 (Bitwise operations)

문자열에 대해 비트 연산을 수행하려면 bitmaps(비트맵) 데이터 타입 문서를 참고하세요. Bitmaps는 문자열을 비트 단위로 다루는 기능을 제공해요.

전체 문자열 명령 목록은 여기에서 확인할 수 있어요.

대안 (Alternatives)

직렬화된 문자열로 구조화된 데이터를 저장하고 있다면, Redis HashesJSON도 고려해 볼 만해요. 구조화된 데이터를 다룰 때는 문자열보다 더 적합할 때가 많죠.

더 알아보기 (Learn more)