Skip to content

Redis-hkey-backup

Redis 의 Hash Key 기반 백업 및 복원 스크립트.

redis-cli

dockerredis-cli 실행:

#!/usr/bin/env bash

docker run --rm -it \
    --network host \
    -u "$(id -u):$(id -g)" \
    redis:6 \
    redis-cli \
    "$@"

KEYS script

전체 키 목록을 확인하자:

#!/usr/bin/env bash

ROOT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" || exit; pwd)

"${ROOT_DIR}/redis-cli" KEYS '*'

Backup script

HGETALL 명령을 사용하면 다음과 같이 출력된다:

  1) "frame_width"
  2) "1920"
  3) "frame_height"
  4) "1080"
  5) "perspective_points"
  6) "600,37,479,906,1068,37,1212,906"
  7) "mm_x"
  8) "5300"
  9) "mm_y"
 10) "38970"
...

그리고 안보이겠지만 라인 끝에 "\r" (CR; Carriage Return) 문자가 포함된다.

따라서 HSET 으로 복원을 위해 다음과 같이 스크립트를 작성한다:

#!/usr/bin/env bash

ROOT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" || exit; pwd)

if [[ $# -ne 2 ]]; then
    echo "Usage: ${BASH_SOURCE[0]} hkey output"
    exit 1
fi

"${ROOT_DIR}/redis-cli" HGETALL "$1" | sed \
    -e 's/^ *[0-9][0-9]*)  *//g' \
    -e 's/^"//g' \
    -e 's/\r//g' \
    -e 's/"$//g' \
    > "$2"
  • $1 - HKEY 가 저장된 Key.

Restore script

#!/usr/bin/env bash

ROOT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" || exit; pwd)

if [[ $# -ne 2 ]]; then
    echo "Usage: ${BASH_SOURCE[0]} input hkey"
    exit 1
fi

mapfile -t args < <(cat "$1")

"${ROOT_DIR}/redis-cli" HSET "$2" "${args[@]}"
  • $1 - 로그 파일 경로
  • $2 - HKEY 를 저장할 Key.

See also