답변:
Redis의 키에 대한 일반적인 명명 규칙은 무엇입니까? 값으로 구분 된 것을 보았지만 일반적인 규칙이 무엇인지, 왜 그런지 잘 모르겠습니다.
예, 콜론 부호 :
는 키 이름을 지정할 때 사용되는 규칙입니다. 에서 이 레디 스 웹 사이트에서 튜토리얼 적혀있다 : 스키마를 고수하려고합니다. 예를 들어 "user : 1000 : password"와 같이 "object-type : id : field"는 좋은 아이디어 일 수 있습니다. "comment : 1234 : reply.to"와 같이 여러 단어 필드에 점을 사용하고 싶습니다.
모든 사용자를 반환하기 위해 키의 시작 부분 만 쿼리 할 수 있습니까?
시작하는 모든 키를 직접 쿼리하는 것과 같은 것을 의미 user:
하는 경우 키 명령이 있습니다. 그러나이 명령은 데이터베이스에 쓰인 모든 키를 검색하기 때문에 O (N) 이므로 디버깅 목적으로 만 사용해야 합니다.
이 문제에 대한 더 적절한 해결책은 전용 키를 작성 users
하는 것입니다. 이름은 입니다. 예를 들어 목록 또는 세트 데이터 구조에 모든 사용자 키를 저장합니다 .
$redis->delete($redis->keys('user:password:*'));
네임 스페이스 구분자로 콜론 (:)을 사용하고 키의 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를 공용 읽기 전용 캐시로 사용하는 경우 문제가되지 않습니다.
curl http://example.com/api/user/1/password
'd, 또는 유사한 것을 구걸하고 있습니다. (그냥
User#23:uploads:my/path/to/file.ext
아직 Redis 키 이름 지정에 대한 "모범 사례"가 널리 퍼져 있는지 여부는 알 수 없습니다.
ASCII NUL 문자를 구분 기호로 사용하여 실험했습니다 (Redis와 Python은 모두 8 비트이므로). 원시 키를 보면 약간 추한 것처럼 보이지만 추상화 레이어 뒤에 숨기는 것이 좋습니다. 네임 스페이스의 구성 요소가이를 사용하지 않거나 필요에 따라 각 구성 요소를 인코딩하려는 경우 콜론 및 파이프 기호는 확실한 대안입니다. 그러나 인코딩 할 경우 추상화 레이어를 개발하고 어쨌든 원시 키를 보지 않으려 고합니다.
이에 대한 다른 의견이 있는지 알아 보는 데 흥미로울 것입니다.
scan
옵션 @EranH.가 아니라 키를 반복하는 것이 가장 좋습니다.scan
요소 컬렉션을 점진적으로 반복하기 위해 사용됩니다.