복붙노트

[REDIS] 레디 스에서 중첩 된 구조의 대안?

REDIS

레디 스에서 중첩 된 구조의 대안?

나는 더 레디 스 '간단한 데이터 구조의에 들어갈 수있는 것보다 저장소에 정보를 복잡하게 한 경우로 계속 실행. 나는 아직도 레디 스를 사용하려면, 그러나 중첩 된 구조를 사용하고자 할 때 이상적으로 사람들이 사용하는 표준 대안이 있는지 궁금 해서요?

해결법

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

    1.당신은 기본적으로 두 가지 전략이있다 :

    당신은 기본적으로 두 가지 전략이있다 :

    이 답변에 간단한 예제를 참조하십시오 :

    JSON에서 레코드에 LPUSH 명령 작업 초기화 된 것이다?

    마지막으로, 레디 스 문서 지향 데이터베이스 아니다. 당신이 정말로 복잡한 문서를 많이 가지고 있다면, 아마도 당신은 더 나은 등등 MongoDB를, ArangoDB, CouchDB를, 카우치베이스 주식회사, 같은 솔루션이 제공 될 수 ...

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

    2.개체를 수정해야 할 때 문자열로 복잡한 객체를 직렬화하고, 레디 스에 문자열을 저장하는 것은 매우 비효율적이다. 클라이언트 측에 문자열을 다시 가져올 필요가 있기 때문에, 객체로 역 직렬화 수정, 다시 문자열로 직렬화하고, 다시 레디 스에 그것을 저장. 너무 많은 일...

    개체를 수정해야 할 때 문자열로 복잡한 객체를 직렬화하고, 레디 스에 문자열을 저장하는 것은 매우 비효율적이다. 클라이언트 측에 문자열을 다시 가져올 필요가 있기 때문에, 객체로 역 직렬화 수정, 다시 문자열로 직렬화하고, 다시 레디 스에 그것을 저장. 너무 많은 일...

    지금, 그것은 2019, 그리고, 예를 중첩 된 데이터 구조를 지원하기 위해 레디 스를 활성화 할 수 있습니다 새로운 레디 스 모듈이있어 RedisJSON, 레디 스 - protobuf.

    Desclaimer : 나는이 모듈에 대한 몇 가지 예를주지 그래서 나는 레디 스 - protobuf의 저자입니다. 또한 레디 스 - protobuf는 신속하고 그것의 사용을 직렬화하는 텍스트 형식이 아닌 바이너리 포맷 이후 / 데이터를 역 직렬화, RedisJSON보다 더 많은 메모리를 효율적입니다.

    우선, 당신은 Protobuf 형식으로 중첩 된 데이터 구조를 정의하고 로컬 파일에 저장해야합니다

    syntax = "proto3";
    
    message SubMsg {
        string s = 1;
        int32 i = 2;
    }
    
    message Msg {
        int32 i = 1;
        SubMsg sub = 2;
        repeated int32 arr = 3;
    }
    

    그런 다음 redis.conf에서 다음과 같은 구성으로 모듈을로드 :

    loadmodule /path/to/libredis-protobuf.so --dir proto-directory
    

    그 후, 당신은 읽고 중첩 된 데이터 구조를 작성할 수 있습니다 :

    PB.SET key Msg '{"i" : 1, "sub" : {"s" : "string", "i" : 2}, "arr" : [1, 2, 3]}'
    PB.SET key Msg.i 10
    PB.GET key Msg.i
    PB.SET key Msg.sub.s redis-protobuf
    PB.GET key Msg.sub.s
    PB.SET key Msg.arr[0] 2
    PB.GET key Msg.arr[0]
    

    세부 사항에 대한 문서를 확인하시기 바랍니다. 당신은 레디 스 - protobuf에 문제가 있으면 알려 주시기 바랍니다.

  3. from https://stackoverflow.com/questions/16094574/alternatives-to-nested-structures-in-redis by cc-by-sa and MIT license