[redis] Redis 주요 명명 규칙?

Redis의 키에 대한 일반적인 명명 규칙은 무엇입니까? 값을 구분하여 :보았지만 일반적인 규칙이 무엇인지 또는 왜 확실하지 않습니다.

사용자에게는 다음과 같은 것을 할 것입니다 …

user:00

사용자의 ID가 00

모든 사용자를 반환하기 위해 키의 시작 부분 만 쿼리 할 수 ​​있습니까?

나는 주로 사람들을 위해 일하는 방식과 그들이 선택한 이유를 연구함으로써 미래의 문제를 피하기를 바라고 있습니다.



답변

Redis의 키에 대한 일반적인 명명 규칙은 무엇입니까? 값으로 구분 된 것을 보았지만 일반적인 규칙이 무엇인지, 왜 그런지 잘 모르겠습니다.

예, 콜론 부호 :는 키 이름을 지정할 때 사용되는 규칙입니다. 에서 레디 스 웹 사이트에서 튜토리얼 적혀있다 : 스키마를 고수하려고합니다. 예를 들어 “user : 1000 : password”와 같이 “object-type : id : field”는 좋은 아이디어 일 수 있습니다. “comment : 1234 : reply.to”와 같이 여러 단어 필드에 점을 사용하고 싶습니다.

모든 사용자를 반환하기 위해 키의 시작 부분 만 쿼리 할 수 ​​있습니까?

시작하는 모든 키를 직접 쿼리하는 것과 같은 것을 의미 user:하는 경우 명령이 있습니다. 그러나이 명령은 데이터베이스에 쓰인 모든 키를 검색하기 때문에 O (N) 이므로 디버깅 목적으로 만 사용해야 합니다.

이 문제에 대한 더 적절한 해결책은 전용 키를 작성 users하는 것입니다. 이름은 입니다. 예를 들어 목록 또는 세트 데이터 구조에 모든 사용자 키를 저장합니다 .


답변

네임 스페이스 구분자로 콜론 (:)을 사용하고 키의 id 부분에 대한 해시 (#)를 사용합니다.

logistics:building#23


답변

규칙은 콜론 (것 같습니다 🙂 하지만, 나는 개인적으로 구분 기호 슬래시 (/)를 선호 그래서 나는 웹 개발자입니다. 슬래시는 이미 URL 내에서 매우 중요한 분리 자이며, 이는 균등 리소스 로케이터 이므로 리소스의 일종의 키입니다. 콜론 (:)으로 다른 접근법을 사용해야하는 이유는 무엇입니까? 도움이 되나요?

이 예제를 고려하십시오.

우리는이 편안하고 장난감 개체에 대한 API를. 하나 있습니다 :

http://example.com/api/toy/234

우리가 어디에 보관 했습니까? Redis와 슬래시를 사용하므로 키가 분명합니다.

toy/234

이것은 장난감의 독특한 열쇠입니다. 클라이언트 측에서도이 키를 사용할 수 있습니다.

{
    key: "toy/234",
    color: "red",
    url: function () {
        return API_BASE_URL + this.key;
    }
}

사용자가 key로 객체를 요청합니다 toy/666. Redis에서 얻는 방법? Node.js 관련 예제 :

redis.get(key, function reply_callback(error, toystring) {
    var toy = JSON.parse(toystring);
    ...
}

슬래시를 콜론으로 변환하거나 그 반대로 변환 할 필요가 없습니다. 편리하지 않습니까?

참고 : 항상 사용자가 의도 한 것에 만 액세스 할 수 있는지 확인하십시오. user/1/password주석가가 지적한 것처럼 위의 원시 URL-key 접근 방식도 가져올 수 있습니다. Redis를 공용 읽기 전용 캐시로 사용하는 경우 문제가되지 않습니다.


답변

아직 Redis 키 이름 지정에 대한 “모범 사례”가 널리 퍼져 있는지 여부는 알 수 없습니다.

ASCII NUL 문자를 구분 기호로 사용하여 실험했습니다 (Redis와 Python은 모두 8 비트이므로). 원시 키를 보면 약간 추한 것처럼 보이지만 추상화 레이어 뒤에 숨기는 것이 좋습니다. 네임 스페이스의 구성 요소가이를 사용하지 않거나 필요에 따라 각 구성 요소를 인코딩하려는 경우 콜론 및 파이프 기호는 확실한 대안입니다. 그러나 인코딩 할 경우 추상화 레이어를 개발하고 어쨌든 원시 키를 보지 않으려 고합니다.

이에 대한 다른 의견이 있는지 알아 보는 데 흥미로울 것입니다.


답변

유스 케이스의 경우 HSET / HGET 이 더 적합 할 것 같습니다 . 도 있습니다 HKEYS 명령.

이러한 모든 명령은 GET / SET / KEYS와 동일한 복잡성을 가지므로 왜 사용하지 않습니까?

그런 다음이 구조를 가질 수 있습니다.

  • 사용자> 00> 가치
  • 사용자> 01> 가치

또는:

  • 사용자 : 사용자 이름> 00> 값
  • 사용자 : 사용자 이름> 01> 값

사용자 ID를 추출하여 해시 키로 사용하십시오. 개인적으로이 방법이 더 좋기 때문에이 방법을 선호하며 기존 사용자 ID를 쉽게 쿼리 할 수 ​​있습니다.


답변