복붙노트

[REDIS] 문자열로 성능, 저장 JSON 개체를 레디 스

REDIS

문자열로 성능, 저장 JSON 개체를 레디 스

내가 좋아하는 사용자 모델, 무언가를 저장해야합니다 :

{ "nickname": "alan",
  "email": ...,
  "password":...,
  ...} // and a couple of other fields

오늘은 Set를 사용 : 사용자 이 세트에, 나는 사용자가 같은 멤버를 가지고 : 앨런을 이 멤버에서 나는 해시 위를

이것은 잘 작동되지만 대신에 의미가 하나를 다음 사용하도록 만들 수 위의 방법의 경우 난 그냥 궁금 해서요 :

아직 사용자가 사용하는 설정 (쉽게 사용자 (회원) 목록을 얻을에) 이 세트에서 단지 키 / 값 저장을 같이 사용합니다 :

키 : 앨런 값 : 상기 사용자의 캐릭터 라인 화 해시 버전

기록을 검색하는 것은 다음 (I 다음 JSON으로 파싱 할 것이다) 쉬울 것이다.

나는 레디 스 아주 새로운 그리고 난 반드시 최선 수 있는지 모르겠습니다. 어떻게 생각해 ?

해결법

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

    1.당신은 당신의 JSON 객체 필드와 값을 저장하는 레디 스 해시 데이터 구조를 사용할 수 있습니다. 예를 들어 당신의 "사용자"설정은 여전히 ​​모든 사용자를 저장하고 개별 JSON 객체가 같은 해시에 저장 될 수있는리스트로 사용할 수 있습니다 :

    당신은 당신의 JSON 객체 필드와 값을 저장하는 레디 스 해시 데이터 구조를 사용할 수 있습니다. 예를 들어 당신의 "사용자"설정은 여전히 ​​모든 사용자를 저장하고 개별 JSON 객체가 같은 해시에 저장 될 수있는리스트로 사용할 수 있습니다 :

    db.hmset("user:id", JSON.stringify(jsonObj));
    

    이제 키에 의해 얻을 수있는 모든 사용자 또는 특정 일 (있는 당신은 / 설정 한 경우에만 지정된 필드 / 값을 가져). 또한이 두 질문은 아마 시나리오와 관련이 있습니다.

    편집 : (미안 해요 우리가 이전에 대해 얘기 몰랐어요)

    이것은 사실이지만, 해시 데이터 구조와 당신 / 당신이 작업에 필요한 전용 필드 / 값을 설정할 수 있습니다. 당신은 단지 객체의 변경 부분에 원하는 경우 전체 JSON 개체의 성능 저하가 발생할 수 있습니다 가져 오는 (당신이 그것을 얼마나 자주에 따라 다름) (다른 것은 당신이 / 캐릭터 라인 화 객체마다 구문 분석해야 할 것입니다).

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

    2.해시를 통해 JSON에 대한 하나의 추가적인 장점은 형태를 유지하고있다. 123.3은 / 없음 실수로 "널 (null)"을 주조 할 수없는 문자열 "123.3"도서관 널에 따라이된다.

    해시를 통해 JSON에 대한 하나의 추가적인 장점은 형태를 유지하고있다. 123.3은 / 없음 실수로 "널 (null)"을 주조 할 수없는 문자열 "123.3"도서관 널에 따라이된다.

    모두와 약간의 지루한는 문자열을 추출하고 자신의 예상 유형으로 그들을 다시 변환하는 변압기를 작성할 필요하다.

    I는 N * (SUM (렌 (CONCAT 오버 헤드 없었다 있도록 공간 / 메모리 소비 고려 사항, I는 [123.5, NULL, ... "my_type_version"]는 JSON리스트처럼 값을 저장하는쪽으로 기울고 시작한 (JSON 키 이름))) 내 경우 이는 레디 스의 사용 메모리 풋 프린트의 + 60 %였다.

  3. ==============================

    3.명심 : 해시는 JSON이 그것을 할 수있는, 중첩 된 객체를 저장할 수 없습니다.

    명심 : 해시는 JSON이 그것을 할 수있는, 중첩 된 객체를 저장할 수 없습니다.

  4. ==============================

    4.정직하게, 어느 쪽이든 잘 작동합니다. 당신이 그것을 저장하는 방법은 확인해야합니다 디자인 결정이다. 그것은 당신이 사용자 정보 등을 검색하는 방법에 따라 달라집니다

    정직하게, 어느 쪽이든 잘 작동합니다. 당신이 그것을 저장하는 방법은 확인해야합니다 디자인 결정이다. 그것은 당신이 사용자 정보 등을 검색하는 방법에 따라 달라집니다

    성능의 관점에서, 저장 JSON은 적은 메모리를 사용하여 저장 / 검색을위한 시간이 덜 걸릴 사용자 객체의 버전을 인코딩. 즉, JSON 파싱은 아마 빨리 레디 스에서 각 필드를 검색하는 것보다입니다. 심지어하지 않을 경우 그리고, 그것은 아마도 더 많은 메모리를 효율적입니다. 성능의 차이는 아마도 최소한 어쨌든입니다.

  5. from https://stackoverflow.com/questions/5729891/redis-performance-store-json-object-as-a-string by cc-by-sa and MIT license