redis 문자열 형식동력 노드 자바 대학 정리
만약 당신 이 정말 그렇게 생각한다 면,몇 가지 문제 가 있 으 면 당신 을 베 러 올 것 입 니 다.먼저 우리 가 redis 수첩 을 찾 아 보 겠 습 니 다.http://doc.redisfans.com/
첫째:만약 당신 이 매번 Append 함 수 를 실행한다 면,그것 은 redis 의 char[]가 매번 다시 용량 을 늘 려 야 하 는 것 이 아 닙 니까?이렇게 하면 매번 시간 을 소모 하 는 것 이 아 닙 니까?
둘째:만약 당신 이 String 중의 StrLen 을 실행 할 때마다 redis 밑바닥 은 매번 char 배열 을 옮 겨 다 니 며 결 과 를 얻 지 않 습 니까?
1.Redis 의 String 이 어떻게 저장 되 는 지 탐색
위 에서 말 한 작은 상황 에 따 르 면 redis 의 작 가 는 그렇게 멍청 하지 않 고 정상 적 인 논 리 는 char[]배열 의 차원 에서 스스로 한 층 더 포장 해 야 한다.
1.SDS 구조 체
redis 에 서 는 SDS(simple dynamic string)로 char[]를 패키지 합 니 다.이것 도 redis 가 저장 하 는 가장 작은 단원 입 니 다.다음 문 제 는 어디서 볼 수 있 습 니까?내 가 wget 압축 가방 에 있 을 때 안에 redis 소스 코드 가 있 었 다 고 합 니 다.아직 3w 밖 에 안 된다 고 합 니 다.이것 은 우리 에 게 무슨 문제 가 있 는 지 알려 주 는 것 입 니 다.그 렇 죠?편리 함 을 찾기 위해 redis 의 소스 코드 를 window 에 끌 고 가서 vs 로 열 었 습 니 다.다음은 SDS 가 어떻게 생 겼 는 지 볼 까요?
redis 소스 코드 에 정 의 된 sds.h 소스 파일 을 볼 수 있 습 니 다.이상 할 수도 있 습 니 다.이 세 가지 속성 은 무엇 에 사 용 됩 니까?다음은 간단히 말씀 드 리 겠 습 니 다.
<1>len:char[]의 길 이 를 표시 합 니 다.우리 C\#에서 List 의 length 와 비슷 합 니 다.
<2>free:char[]에서 사용 하지 않 은 요소 의 개 수 를 표시 합 니 다.바로 몇 개의 빈 구덩이 가 있다 는 뜻 입 니 다.
<3>buf[]:원 소 를 저장 하 는 구덩이 입 니 다.원소 의 실제 개수 와 같 지 않 습 니 다.예 를 들 어 앞에서 말 한 cnblogs 입 니 다.[c][n][b][l][o][g][s][/0][][][][]일 수도 있 습 니 다.
2.Redis 대상 탐색(RedisObject)
앞에서 말 한 SDS 는 char[]배열 의 패 키 징 일 뿐 redis 의 5 가지 유형 을 표시 할 수 없 기 때문에 redis 는 SDS 위 에 패 키 징 을 해 야 하기 때문에 다음 이 있 습 니 다.
RedisObject 대상,어떻게 생 겼 는 지 먼저 봅 시다.
RedisObject 가 redis.h 소스 코드 파일 에 있 는 것 을 볼 수 있 습 니 다.다음은 type 과 ptr 속성 을 간단하게 말씀 드 리 겠 습 니 다.자세 한 것 은 다음 에 말씀 드 리 겠 습 니 다.
<1>type 이것 이 바로 redis Object 가 어떤 유형 인지 표시 하 는 것 입 니 다.어떤 유형 인지 라면 분명 한 유형 이 있 을 것 입 니 다.그 렇 죠?있 을 거 예요.보 여 드릴 게 요.
<2>*ptr 에서 볼 수 있 는 것 은 포인터 형식 입 니 다.가리 키 는 메모리 주 소 는 SDS 매 거 진 형식 입 니 다.
자,이제 블 로그 시작 부분 을 통합 할 수 있 습 니 다.
127.0.0.1:6379> set name cnblogs
OK
127.0.0.1:6379> get name
"cnblogs"
127.0.0.1:6379>
위의 set 명령 에 대하 여 redis 는 사실 두 개의 RedisObject 대상 을 만 들 것 입 니 다.키 의 RedisObject 와 값 의 RedisOjbect 중 type=REDISSTRING 은 모두 문자열 대상 형식 입 니 다.그 중에서 SDS 는 각각 name 과 cnblogs 의 문 자 를 저장 합 니 다.자,대충 이렇게 되 었 습 니 다.3.재 미 있 는 명령 몇 개 를 고 르 세 요.
1. incr,incrby,decr,decrby
이 네 가지 명령 은 C\#의 Interlocked 와 같은 방법 입 니 다.Interlocked 를 알 고 있다 면 아래 에 각종 원자 가 증가 하고 감소 하 는 방법 이 있다 는 것 을 알 수 있 을 것 입 니 다.다음 그림 과 같 습 니 다.
redis 이거 자 증 하면 뭐 가 좋 을까요?저 는 이 걸 로 주문 번 호 를 만 드 는 것 이 좋 을 것 같 습 니 다.휴대 할 때 주문 번 호 를 만 드 는 것 은 전문 적 인 OrderindDB 중의 func 함수 로 생 성 된 것 으로 기억 합 니 다.그러면 Orderind 는 그 어떠한 업무 창고 에 도 의존 하지 않 고 우 리 는 상대 적 으로 편리 한 라 이브 러 리 분 표를 만 들 수 있 습 니 다.지금 은 redis 로 이렇게 하 는 것 도 좋 습 니 다.
다른 명령 들 도 더 이상 할 말 이 없 으 니,여러분 은 redis 매 뉴 얼 을 대조 해서 보시 면 됩 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Redis 해시에 대한 완벽한 가이드변경 가능하므로 필요에 따라 쉽게 변경하고 업데이트할 수 있습니다. Redis 해시는 구조가 평평하므로 JSON에서와 같이 여러 수준을 가질 수 없습니다. redis 해시의 명명 규칙은 hash:key 로 입력되므로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.