Redis-hkey-backup
Redis 의 Hash Key 기반 백업 및 복원 스크립트.
redis-cli
docker 로 redis-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.