2017-09-24 8 views
0

저는 Rediffon의 RMapCache 구조를 사용하고 있습니다. 이는 생존 시간별로 항목 제거를 지원하고지도의 최대 크기를 설정하기 때문입니다. 모든 것이 Java에서 문제없이 작동하지만 동일한 Redis 인스턴스를 사용하는 NodeJS 앱이 동일한 기본 HSET 구조에서 값을 가져올 수 없음을 알았습니다.Redisson - RMapCache는 값에 2 바이트를 추가합니다.

문제는 RMapCache 사용하는 경우 Redisson가 HSET의 각 값에 2 바이트를 앞에 추가 점이다 enter image description here

Redisson 소스 코드에 파고 약간의 시간을 보내고 난 후에, 나는 루아 스크립트 삽입 절차에 사용되는 것으로 나타났습니다한다

local val = struct.pack('dLc0', tonumber(ARGV[4]), string.len(ARGV[6]), ARGV[6]); 
    redis.call('hset', KEYS[1], ARGV[5], val); 

ARGV [6]는 값 자체 때문에 다른 2 바이트이다 : 미시건

  • 최대 유휴 시간 다음 행을 갖는다 lliseconds 효과적으로 다른 언어 또는 다른 Java 클라이언트 다음 Redisson에서 레디 스 HSET를 사용할 수 없게

이 값의

  • 길이 (방법을 넣어 전달 될 수 있습니다).

    누군가 동일한 문제가 발생하여이를 처리하는 방법을 알고 있습니까?

  • 답변

    0

    RMapCache은 전적으로 시간별로 개별 항목 퇴거로 제한된 용량과 제한된 용량을 모두 지원하는 Redisson 생성입니다. Redis에서 지원하지 않기 때문에 다른 언어 및 클라이언트는 이러한 기능을 지원하지 않습니다.

    Redisson은 각 값 옆에있는 개별 요소와 관련된 메타 정보를 포장하지만 이는 의도 한대로 작동하도록 만드는 유일한 트릭이 아닙니다.

    다른 클라이언트는 데이터 압축을 풀고 메타 데이터를 무시하여 값을 읽을 수 있지만 Redisson을 거치지 않고 값을 변경하면 Redisson 클라이언트 측에서 예기치 않은 동작이 발생할 수 있습니다.