[REDIS] 누군가가 레디 스 SETBIT 명령을 설명 할 수 있습니까?
REDIS누군가가 레디 스 SETBIT 명령을 설명 할 수 있습니까?
> setbit mykey 1 1
> setbit mykey 7 1
내가 문자열 값 1 "의 mykey"에 7 저장할 때, 무엇을 정확히 레디 스에 저장된? 그리고 어떻게 getbit 내부 레디 스를 작동?
사람이 루프이 값 내부의 비트를 시도 하는가? 가능, 나는 bitcount 나에게 2 번을 줄 것이다 알고 있지만, 나는 또한 그것에서 정확한 문자열 값 1과 7 싶어?
--
나는 출력을 읽을 얼랑 레디 스 클라이언트를 사용하여 몇 가지 실험을하고.
> setbit mykey 1 1
얼랑 출력 :
<<"@">>
그 때 나는이 항목을 삭제 :
> del mykey
나는 2 4 8을 상쇄하기 위해 같은 일을, 당신은 여기 매핑을 볼 수 있습니다 :
When offset is 1, the output is <<"@">>;
When offset is 2, the output is <<" ">>;
When offset is 4, the output is <<"\b">>;
When offset is 8, the output is <<0,128>>;
솔직히, 나는 더 많은 지금 혼란 스러워요.
또는 사람이 "bitops.c"를 설명 할 수
- 업데이트 ---
내가 질문을 더 명확하게하기 위해이 작업을 수행 할 수 아마 그래서 나는 이유를 언급해야한다. 우리 모두는 온라인 사용자를 저장하는 데 사용할 비트 맵에 멋진 알고 있습니다. 내가 뭘하려고 저장 레디 스 것과 온라인 정확히 사용자 ID를 얻을 수있다.
그냥 레디 스에서 오프셋을 추출하는 빠른 버전을 완료했다. 그것을 개선 주시기 바랍니다.
해결법
-
==============================
1.이름에서 알 수 있듯이, SETBIT는 비트 연산을 수행 할 수 있습니다 - 주어진 비트가 지정된 키를 들면, 오프셋 (offset) 즉, 0 또는 1로 지정된 비트를 설정합니다.
이름에서 알 수 있듯이, SETBIT는 비트 연산을 수행 할 수 있습니다 - 주어진 비트가 지정된 키를 들면, 오프셋 (offset) 즉, 0 또는 1로 지정된 비트를 설정합니다.
무엇 이해하는 것이 중요한 것은 결과가 항상 인쇄 가능한 문자가 포함되어 있다는 것입니다. 레디 스의 CLI 출력 형식을 사용자 정의 기능 sdscatrepr를 사용하는 이유입니다 :
그 존재는 간단한 예제와 함께하자 시작했다. 당신이 16 진수를 고려하는 경우 0x7F의 (= 127) 8 비트의 이진 표현입니다 :
pos: 0 1 2 3 4 5 6 7 bit: 0 1 1 1 1 1 1 1 ^ ^ | | MSB LSB
당신은 일반적으로 7 LSB 0이 MSB 오프셋 및 오프셋 염두에두고,이 값을 저장하기 위해 SETBIT를 사용할 수 있습니다 :
redis> SETBIT myval 0 0 (integer) 0 redis> SETBIT myval 1 1 (integer) 0 redis> SETBIT myval 2 1 (integer) 0 redis> SETBIT myval 3 1 (integer) 0 redis> SETBIT myval 4 1 (integer) 0 redis> SETBIT myval 5 1 (integer) 0 redis> SETBIT myval 6 1 (integer) 0 redis> SETBIT myval 7 1 (integer) 0
은 값이 경우 검사 수 :
redis> GET myval "\x7f"
이제 어떻게 멀티 바이트됩니까? 하자 당신이 ASCII에서 문자 R에 해당하는 0x52 (= 82)를 저장하고 싶은 말은. 8 비트 표현의 비트 위치와 01,010,010 (8, 9, ..., 15) 우리가 오른쪽 첫 번째 값 후 저장할 보낸 사람 :
redis> SETBIT myval 8 0 (integer) 0 redis> SETBIT myval 9 1 (integer) 0 redis> SETBIT myval 10 0 (integer) 0 redis> SETBIT myval 11 1 (integer) 0 redis> SETBIT myval 12 0 (integer) 0 redis> SETBIT myval 13 0 (integer) 0 redis> SETBIT myval 14 1 (integer) 0 redis> SETBIT myval 15 0 (integer) 0
그리고 당신은 얻을 :
redis> GET myval "\x7fR"
여기 레디 스 CLI는 인쇄 가능한 문자 R.를 나타낼 수있다
이것은 헥스 65 0x41을 같다 01,000,001에 대응한다. 이 ASCII 문자 A로하고 그래서 해당합니다
redis> SETBIT mykey 1 1 (integer) 0 redis> SETBIT mykey 7 1 (integer) 0
제공합니다 :
redis> GET mykey "A"
그것은 단순히 지정된 위치에있는 비트의 값을 반환합니다. 여기:
redis> GETBIT mykey 1 (integer) 1
그러나 0 (기본값 0) 이렇게 설정되어 있지 않은 비트 :
redis> GETBIT mykey 0 (integer) 0
-
==============================
2.u는 http://redis.io에 정확히 세부 정보를 볼 수 있습니다
u는 http://redis.io에 정확히 세부 정보를 볼 수 있습니다
GETBIT 키 오프셋
키에 저장된 문자열 값의 오프셋 (offset)의 비트 값을 돌려줍니다. 문자열 길이 이상으로 오프셋되면, 문자열은 0 비트를 갖는 연속 공간으로 간주된다. 키는, 비어있는 스트링으로 간주 존재 때문에 상쇄되지 않을 때 범위에서 언제나 그 값은 0 비트를 갖는 연속 공간으로 간주된다.
예 :
redis> SETBIT mykey 7 1 (integer) 0 redis> GETBIT mykey 0 (integer) 0 redis> GETBIT mykey 7 (integer) 1 redis> GETBIT mykey 100 (integer) 0 redis>
from https://stackoverflow.com/questions/20673131/can-someone-explain-redis-setbit-command by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 다른 시스템에 레디 스 복제 사용 (멀티 마스터) (0) | 2020.01.03 |
---|---|
[REDIS] 새로운 레디 스 마스터가 센티넬를 사용하는 클라이언트를 확인하는 방법 (0) | 2020.01.03 |
[REDIS] StackExchange.Redis에서 비동기 명령과 Task.WhenAny 기다리고 있습니다 후 시간 제한 예외 (0) | 2020.01.03 |
[REDIS] 자바 스크립트 스텁 레디 스가 상호 작용 Sinon를 사용하여 (0) | 2020.01.03 |
[REDIS] 어떻게 ConnectionMultiplexer는 연결 해제를 처리합니까? (0) | 2020.01.03 |