복붙노트

[REDIS] 가게에 가장 좋은 방법은 키를 레디 스

REDIS

가게에 가장 좋은 방법은 키를 레디 스

나는 (사용자 및 위치를 예를 들어, 생각) 몇 가지 정보를 저장하고 시간이 지남에 따라 그 정보의 변화를 감지하는 레디 스를 사용하고 있습니다. 길거나 짧은 키 이름을 사용하는 가치는 무엇인가? 더 이상 키가 명확하지만, 더 이상 키 이름을 사용하는 메모리 나 성능이 훨씬 비용 사용하십니까?

다음 예는 다음과 같습니다

SET L:123456 "<name> <latitude> <longitude> ..."
HSET U:987654321 loc 123456 time <epoch>

또는

SET loc:{123456} "<name> <latitude> <longitude> ..."
HSET user:{U987654321} loc 123456 time <epoch>

해결법

  1. ==============================

    1.이 모든 것은 당신이 그것을 사용하려는 방법에 따라 달라집니다. 클라우드 서비스로 전송 각각 킬로바이트, 당신은 비용을 계산할 수 있습니다마다 바이트 수 있다면, 예를 들어, 당신은 지불해야 할 때. 수학 간단하다; 바이트는 '와이어에'바이트이다. 레디 스 내부, 더 큰 값이 동일하게 간단하다. 작은 값의 경우, 레디 스는 일부 메모리 최적화를 수행합니다.

    이 모든 것은 당신이 그것을 사용하려는 방법에 따라 달라집니다. 클라우드 서비스로 전송 각각 킬로바이트, 당신은 비용을 계산할 수 있습니다마다 바이트 수 있다면, 예를 들어, 당신은 지불해야 할 때. 수학 간단하다; 바이트는 '와이어에'바이트이다. 레디 스 내부, 더 큰 값이 동일하게 간단하다. 작은 값의 경우, 레디 스는 일부 메모리 최적화를 수행합니다.

    당신의 HSET 예에서, 당신은 당신이 그들에게 시간을 서로 가장 분리해야하는 경우에만 의미가 회원을 밖으로 분할합니다. 더 나은 방법이 될 -might- : HSET 사용자 : 데이터 987654321 '{ "LOC": "123456", "시간": "2014-01-01T13 : 00 : 00"}'. 별도의 키 / 회원 '비용'더 긴 문자열보다 훨씬 성능 현명한. 단지 하나의 완전한 반 정적 개체로 사용할 것 경우에 당신은 한 멤버의 전체 테이블 또는 데이터 집합을 넣을 수 있습니다.

    속도와 크기 : 키와 값 사이에 주목할만한 차이가 있습니다.

    키 : 짧은은 일반적으로 더 효율적인 메모리뿐만 아니라 속도 효율적입니다. 당신은이 소트 세트는 당신도 키와 같은 '숫자'(소트 세트 '회원'플러스 '점수')를 사용할 수 있습니다 레디 스를 사용하는 경우. 나는 '숫자'점수가 기술적으로 float64이지만, 어떤 소수 부분없이, 그것은 -999999999999999 사이 999999999999999 (15 자리의 그)를 포함하여 수있는 ID로 사용할 수 있기 때문에 말한다. 레디 스 빠르고 확장 성이 O (로그 (N)) 않기 때문에 이것은 (간체, skiplists를 사용하여) 정렬 된 세트의 정렬 온 - 더 - 플라이, 정말 도움이 될 수 있습니다.

    값 : MsgPack 형식 (비 압축)를 사용하면 한 번 값 많은 정의를 저장 특히, 최소한의 공간을 차지합니다. JSON은 약간 적은 메모리를 효율적이지만 탈락되어서는 안된다는 등의 일반적인 IPC 형식 당연히이다. 원시 문자열, 문자 분리, 고정 길이 (우), 그것은 가능 어떤 욕망 사용할 수 있습니다. 당신은 항상 레디 스에 저장하기 전에 데이터를 압축 할 수 있습니다. 지금까지 메모리 효율 그래서. 이 속도에 관해서, 덜 간단합니다. 당신은 (당신이해야), 당신은 압축 된 데이터와 아무것도 할 수 없습니다 루아 서버 측 스크립트를 사용합니다. JSON과 MsgPack는 있지만 '전체', 직렬화 할 수 있습니다. 어떤 대부분의 사람들의 시나리오에서 괜찮습니다. (: 너무 높은 가격을 대부분의 시간을) 가장 유연한의 (a HSET의 구성원으로서, 예를 들어) 별도의 값을 저장됩니다 만, 잘 같은 가격에 제공됩니다. 또한 이러한 모든 결합 할 수 있습니다. 우리가 가장 많이 사용하는 어떤하십시오 MsgPack 페이로드 다음에 두 개 또는 세 개의 구분 기호로 구분 된 값의 접두사.

    내 일반적인 조언입니다 : 함께 속한 데이터를 분할하지 않습니다 만 사용 HSET의와 ZSET의 시작, 사용 설명은 10-25 문자 사용 사이에 키의 이름을 PascalCased ':'당신이 당신의 키에 구분 기호를 필요로하는 경우 (네임 스페이스) , JSON으로 직렬화는 (편의상하지만 MsgPack에 쉽게 전환에 대한 코드), 루아 스크립팅을 사용 (당신은 루아를 모르더라도, 당신은 레디 스에서 사용하는 집합은 작은입니다).

    내가 프로젝트의 시작 단계에서 너무 많이 걱정하지 것입니다, 당신은 항상 나중에 변경 및 일부 interpolatable 데이터가 곧 같은 일부 A / B 비교를 할 수 있습니다.

    이, TW 도움이되기를 바랍니다

  2. ==============================

    2.이제 레디 스의 V3.2은 거의 여기에, 당신은 새로운 지리적 해시 기능에 전환을 고려해야합니다 http://redis.io/commands/geoadd

    이제 레디 스의 V3.2은 거의 여기에, 당신은 새로운 지리적 해시 기능에 전환을 고려해야합니다 http://redis.io/commands/geoadd

  3. from https://stackoverflow.com/questions/22547994/best-way-to-store-redis-keys by cc-by-sa and MIT license