Redis 기초 (3)

시바코코개발자·2023년 11월 10일
0

레디스

목록 보기
3/3
post-thumbnail

1. Redis - basic 활용법(3)

  1. set 명령어:

    • set 명령어는 가장 기본적인 명령 중 하나로, 키(key)에 값을(value) 할당합니다.
    • 예: set fkey "value"fkey라는 키에 "value"라는 값을 저장합니다.
  2. pexpire 명령어:

    • pexpire는 키의 만료 시간을 밀리초 단위로 설정합니다.
    • 예: pexpire fkey 10000fkey라는 키의 만료 시간을 10초 후로 설정합니다.
    • 만료 시간이 지나면 키는 자동으로 삭제됩니다.
  3. pexpireat 명령어:

    • pexpireat 명령어는 키의 만료 시간을 특정한 유닉스 타임스탬프로 설정합니다.
    • 예: pexpireat fkey 16650050fkey라는 키를 유닉스 타임스탬프 16650050에 해당하는 시점에 만료하도록 설정합니다.
  4. TTL 명령어:

    • TTL 명령어는 키의 남은 생존 시간을 초 단위로 반환합니다.
    • 예: TTL fkey를 실행하면, fkey의 남은 시간이 초 단위로 반환됩니다.
    • -2는 키가 존재하지 않거나 만료 시간이 설정되지 않았음을 의미합니다.
  5. PTTL 명령어:

    • PTTL 명령어는 TTL과 비슷하지만, 남은 생존 시간을 밀리초 단위로 반환합니다.
    • 예: PTTL fkey를 실행하면, fkey의 남은 시간이 밀리초 단위로 반환됩니다.
  6. object refcount 명령어:

    • object refcount 명령어는 키가 현재 몇 개의 포인터(레퍼런스)에 의해 참조되고 있는지를 반환합니다.
    • 예: object refcount fkey를 실행하면, fkey의 레퍼런스 카운트가 반환됩니다.
  7. object encoding 명령어:

    • object encoding 명령어는 키의 값이 어떤 인코딩 방식으로 저장되어 있는지를 반환합니다.
    • 예: object encoding fkey를 실행하면, fkey의 값이 저장된 인코딩 방식이 반환됩니다. (int, embstr, raw 등)
  8. append 명령어:

    • append 명령어는 키의 기존 문자열 값 끝에 추가 문자열을 붙입니다.
    • 예: append fkey "extra"를 실행하면, fkey의 현재 값의 끝에 "extra" 문자열이 추가됩니다.

이 명령어들은 Redis에서 데이터를 관리하기 위한 기본 도구로, 데이터를 저장하고, 만료 시간을 관리하며, 메모리 내 데이터의 속성과 상태를 확인하는데 사용됩니다. Redis의 강력한 성능과 유연성은 이러한 명령어들을 통해 데이터를 신속하게 처리하고 애플리케이션에 적시에 제공할 수 있게 합니다.

레퍼런스 카운팅의 목적은 다음과 같습니다:

  • 메모리 관리: 레퍼런스 카운트를 통해 어떤 키가 아직 유효하고 어떤 키가 더 이상 사용되지 않는지 판단할 수 있습니다.

  • 메모리 누수 방지: 키에 대한 모든 참조가 제거될 때 해당 키를 안전하게 삭제함으로써 메모리 누수를 방지합니다.

  • 디버깅: 개발자는 object refcount 명령어를 사용하여 키가 얼마나 많이 사용되고 있는지 진단할 수 있습니다.

Redis에서 object refcount 명령어가 반환하는 레퍼런스 카운트는 그 키가 내부적으로 얼마나 많은 포인터에 의해 참조되고 있는지를 나타냅니다. 일반적으로, 사용자가 set 명령어로 키를 설정할 때, 해당 키에 대한 레퍼런스 카운트는 1이 됩니다. 이는 Redis 내부적으로 그 키를 한 번 참조하고 있음을 의미합니다.


그러나 Redis의 내부 메커니즘은 더 복잡할 수 있으며, 특정 데이터 구조나 상황에서 내부적으로 레퍼런스 카운트가 1 이상이 될 수도 있습니다. 예를 들어, Redis의 복제(replication), 클라이언트 버퍼, 트랜잭션 등의 시스템 내부 프로세스가 키를 참조할 수 있습니다. 이 경우, 키의 레퍼런스 카운트는 사용자가 볼 때 1 이상일 수 있습니다.

또한, object refcount 명령어는 개발자가 직접적으로 관리하는 것이 아니라, Redis 시스템에 의해 자동으로 관리됩니다. 그러므로 사용자가 키를 생성하거나 삭제할 때 자동으로 레퍼런스 카운트가 증가하거나 감소합니다.


Redis에서 object refcount 명령어가 2 이상의 값을 반환하는 경우는 일반적으로 드물지만, 내부적으로 복수의 참조가 발생하는 특정 상황에서 볼 수 있습니다. 여기 몇 가지 가능한 시나리오를 설명드리겠습니다:

  1. 복제(Replication):

    • Redis의 복제 기능을 사용할 때, 마스터 노드의 데이터가 슬레이브 노드로 복제됩니다. 이 과정에서 내부적으로 추가적인 참조가 생성될 수 있습니다. 이는 일반적으로 object refcount를 사용하는 사용자 레벨에서는 보이지 않지만, 복제 메커니즘에 의해 내부적으로 관리됩니다.
  2. 트랜잭션(Transaction):

    • 트랜잭션 도중에 사용되는 키들은 트랜잭션이 완료될 때까지 추가적인 참조를 가질 수 있습니다. MULTIEXEC 명령어를 사용하여 트랜잭션을 시작하고 종료하면, 그 사이에 실행되는 명령어들에 의해 참조되는 키들이 내부적으로 레퍼런스 카운트를 증가시킬 수 있습니다.
  3. 클라이언트 버퍼(Client Buffers):

    • Redis 클라이언트가 큰 데이터를 요청하고 그 데이터가 클라이언트 버퍼에 있는 경우, 해당 데이터의 레퍼런스 카운트가 증가할 수 있습니다. 이는 클라이언트가 데이터를 모두 읽어 들일 때까지 유지됩니다.
  4. Lua 스크립트:

    • Redis에서 Lua 스크립트를 실행할 때, 스크립트 내에서 사용되는 키들은 스크립트 실행 동안 추가적인 참조를 받을 수 있습니다.
  5. 모듈(Module):

    • Redis 모듈이 키를 사용할 경우, 모듈 내부에서 해당 키에 대한 참조를 생성할 수 있습니다.
  6. Pub/Sub 메커니즘:

    • 특정 키를 사용하여 발행/구독(pub/sub) 메커니즘을 구현하는 경우, 구독 중인 클라이언트가 있으면 해당 키에 대한 참조가 존재할 수 있습니다.

이러한 내부 메커니즘 외에도 Redis의 구현이나 사용 환경에 따라 예상치 못한 참조가 발생할 수 있습니다. 그러나 표준적인 Redis 사용 시나리오에서는 일반적으로 키에 대한 object refcount 값이 1을 반환합니다. Redis 서버의 버전이나 특정 구성에 따라 다를 수 있으므로, 높은 레퍼런스 카운트를 보게 되면, 해당 상황을 더 면밀히 조사할 필요가 있습니다.

0개의 댓글