Skip to content

스크립트 개발 / 간이 저장소 DFF.STORE

DFF.STORE는 소규모 KV 데이터를 영속화하는 데 사용되며, 구조는 scope + key -> value입니다. 쓰기 시 자동으로 JSON 직렬화되고, 읽기 시 자동으로 역직렬화되어 JSON 타입이 유지됩니다.

복잡한 쿼리나 대량 데이터는 데이터베이스 커넥터를 사용해야 합니다. 수명이 짧고 액세스 빈도가 높으며 문자열화를 수용할 수 있는 데이터는 DFF.CACHE를 사용해야 합니다.

공통 매개변수

매개변수 필수 / 기본값 설명
key 필수 키 이름, 최대 256
value 필수 JSON 직렬화 가능한 객체
expires None 만료 초; None은 만료되지 않음을 의미
scope 현재 Script ID 네임스페이스, 최대 256
pattern "*" 키 이름 매칭; *는 임의 길이 매칭, ?는 단일 문자 매칭

API

메서드 반환값 / 설명
set(key, value, expires=None, not_exists=False, scope=None) 단일 값 쓰기, None 반환
mset(key_values, expires=None, not_exists=False, scope=None) 일괄 쓰기, None 반환
get(key, scope=None) / DFF.STORE(key, scope=None) 값 반환; 존재하지 않거나 만료된 경우 None 반환
mget(keys, scope=None) {key: value} 반환
getall(scope=None) Scope 아래의 모든 데이터 반환
keys(pattern='*', scope=None) 일치하는 Key 목록 반환
get_pattern(pattern='*', scope=None) 일치하는 데이터 {key: value} 반환
delete(key, scope=None) 지정된 Key 삭제
delete_pattern(pattern='*', scope=None) 일치하는 Key 삭제
ref(key, scope=None, default=None) 동적 값을 지원하는 DFF.API 매개변수를 위한 지연 참조 생성
예시
1
2
3
4
5
6
7
8
9
DFF.STORE.set('user:user-001', {'name': 'User A'}, scope='users')
user = DFF.STORE.get('user:user-001', scope='users')

DFF.STORE.mset({
    'user:user-002': {'name': 'User B'},
    'user:user-003': {'name': 'User C'},
}, scope='users')

users = DFF.STORE.get_pattern('user:*', scope='users')

mget(...)는 요청된 각 Key를 포함하며, 누락되었거나 만료된 값은 None입니다. get_pattern(...)는 일치하면서 아직 유효한 레코드만 포함합니다.

not_exists=True를 사용하면 방금 만료된 Key도 생성을 차단할 수 있습니다. set(...)mset(...) 모두 None을 반환하므로, 생성 결과를 반드시 확인해야 한다면 쓰기 후에 읽어야 합니다. 일괄 쓰기는 항목별로 실행되며, 전부 성공하거나 전부 실패하는 트랜잭션이 아닙니다.

누락되거나 falsy한 expires는 만료되지 않음을 의미하며, 이후 만료 시간 없이 수행되는 쓰기는 기존 만료 시간을 제거합니다. 기존 코드는 expire 매개변수를 사용할 수 있지만, 새 코드는 expires를 일관되게 사용해야 합니다.

동적 참조

DFF.STORE.ref(...)는 동적 참조를 반환하며, DFF.APIdelayed_cron_job, timeout, expires, queue 매개변수에 사용할 수 있습니다. scope를 생략하면 참조는 현재 Script Scope가 아닌 전용 REF Scope를 사용합니다. 일반적으로 쓰기 측과 일치하는 Scope를 명시적으로 전달해야 합니다.

패턴 삭제는 기본적으로 전체 Scope와 일치합니다

delete_pattern()의 기본 패턴은 '*'입니다. 전체 Scope를 삭제해야 한다는 명확한 필요가 없다면 반드시 pattern을 명시적으로 전달하고, 먼저 keys(...)로 일치하는 Key를 확인해야 합니다.

DFF.STORE를 대용량 파일이나 대형 리스트를 장기간 저장하는 데 사용하지 마십시오.