>  기사  >  데이터 베이스  >  Redis의 데이터 구조에 대한 심층 분석 및 애플리케이션 시나리오에 대한 논의

Redis의 데이터 구조에 대한 심층 분석 및 애플리케이션 시나리오에 대한 논의

青灯夜游
青灯夜游앞으로
2022-01-18 09:51:451965검색

이 기사는 Redis의 데이터 구조에 대한 심층적인 이해를 제공하고 이러한 데이터 구조의 적용 시나리오를 살펴보는 데 도움이 되기를 바랍니다.

Redis의 데이터 구조에 대한 심층 분석 및 애플리케이션 시나리오에 대한 논의

Redis 데이터 유형 및 애플리케이션 시나리오

Redis는 ANSI C 언어로 작성된 키-값 저장 시스템입니다. 키 유형은 문자열입니다. [관련 권장 사항: Redis 동영상 튜토리얼]

8가지 데이터 유형 값 데이터 유형:

  • 공통 데이터 유형

    • 문자열 문자열 유형

    • 목록 목록 유형

    • 세트 컬렉션 유형

    • sortedset(zset) 주문 세트 유형

    • 해시 유형

  • 일반적이지 않은 데이터 유형

    • bitmap 비트맵 유형

    • geo 위치 유형

    • 스트림 유형

  • 참고

    Redis의 명령은 대소문자 무시,(SET 설정), 키는 대소문자 무시하지 않음(NAME 이름)

Redis의 데이터 구조에 대한 심층 분석 및 애플리케이션 시나리오에 대한 논의

string 문자열 유형

Redis' String 함수 문자열, 정수, 부동의 세 가지 유형의 값을 표현합니다. 포인트 번호 100.01은 6자리 문자열입니다.

공통 명령

decrdecr key숫자 감소decrbydecrby 키 감소지정된 정수 감소

애플리케이션 시나리오

  • 1. 객체 캐시

  • 2. 단일 값 캐시

  • 3은 낙관적 잠금 incr에 사용됩니다. 숫자를 증가시키면 낙관적 잠금 감시(트랜잭션)를 구현하는 데 사용할 수 있습니다.

  • 4. 값이 존재하지 않는 경우 할당을 사용하여 분산 잠금을 구현합니다.

  • 6.

  • 일반적인 방법의 예
dockerRedis:0>keys *
dockerRedis:0>append testName 2
"1"
dockerRedis:0>exists testName
"1"
dockerRedis:0>append testName " 1234"
"6"
dockerRedis:0>get testName
"2 1234"
dockerRedis:0>set testName1 "testName1"
"OK"
dockerRedis:0>get testName1
"testName1"
dockerRedis:0>getset testName2 "testName2"
null
dockerRedis:0>get testName2
"testName2"
dockerRedis:0>strlen testName
"6"
dockerRedis:0>set incrTest "10"
"OK"
dockerRedis:0>incr incrTest
"11"
dockerRedis:0>get incrTest
"11"
dockerRedis:0>decr incrTest
"10"
dockerRedis:0>decrby incrTest 5
"5"
dockerRedis:0>mset set01 1 set02 2 set03 3
"OK"
dockerRedis:0>mget set01 set02 set03
1) "1"
2) "2"
3) "3"

목록 목록 유형목록 목록 유형은 순서가 지정되고 반복 가능한 요소를 머리 또는 꼬리 근처에서 가져오는 속도가 매우 빠릅니다. 32-1(40억)

공용 명령

명령 이름
명령 이름 명령 형식 명령 설명
set 키 값 설정 값 할당
get 키 가져오기 값 가져오기
getset getset 키 값 값 가져오기 및 값 할당
mset MSET key1 value1 key2 value2 .. keyN valueN 여러 개 설정 key 값을 해당 값으로 변환합니다.
mget MGET KEY1 KEY2 .. KEYN 주어진 키 전체(하나 이상)의 값을 반환합니다
EXPIRE EXPIRE 키 초 키의 만료 시간(초) 설정
append 키 값 추가 꼬리에 값 추가
strlen strlen key 문자열 길이 가져오기
setnx setnx 키 값 값 그렇지 않은 경우 할당을 사용하십시오. 존재
키 값 N P 설정
명령 형식lpushlpush key v1 v2 v3... lpop keyrpush key v1 v2 v3...rpop keylpushx key valueblpop key timeout llen 키lrange key start endlset 키 인덱스 값rpoplpush key1 key2 rpushx keyblpop 키 lindexlindex 키 값목록에서 아래 첨자 인덱스가 있는 요소를 가져옵니다. 인덱스는 0부터 시작합니다. indexltrimltrim 키 시작 끝목록을 정리하고 시작부터 끝 범위만 유지합니다. endbrpoplpushbrpoplpushkey1 목록의 오른쪽에서 Pop하여 key2 목록의 왼쪽에 삽입합니다. 그러면 key1 key2linsertlinsert 키가 피벗 전/후에 차단됩니다. value목록의 피벗애플리케이션 시나리오
명령 설명
다음에서 목록 삽입 the left lpop
목록의 왼쪽에서 꺼내세요 rpush
목록의 오른쪽에서 삽입 rpop
목록 오른쪽부터 꺼내세요 lpushx
목록의 선두에 값을 삽입하세요 blpop
목록 왼쪽에서 목록이 비어있을 때 차단, 최대 차단 시간을 초 단위로 설정할 수 있습니다. llen
목록에 있는 요소 수 가져오기 lrange
목록에서 지정된 간격의 요소를 반환합니다. 간격은 start 및 end lset
목록의 인덱스 위치에 있는 요소를 다음으로 설정합니다. value의 값 rpoplpush
key1 목록의 오른쪽에서 Pop out하여 key2 목록의 왼쪽에 삽입합니다 rpushx
inserts 값을 목록 끝에 넣습니다. value brpop
는 목록이 비어 있으면 차단됩니다. 최대 차단 시간은 초 단위로 설정할 수 있습니다.
1, 스택(스택) =LPUSH + LPOP

2, 큐(큐) =LPUSH 이전 또는 이후 값에 값을 삽입합니다. + RPOP
  • 3, Blocking MQ( Blocking queue) = LPUSH + BRPOP
  • 4, user list, product list, review list
  • set set type
  • Set: 하나의 최대 멤버 수 순서가 지정되지 않은 고유 요소 집합은 2^32 - 1

  • 공통 명령

명령 이름명령 형식

명령 설명saddsadd 키 값1 값2 ....요소를 컬렉션 키에 저장, 요소가 존재하는 경우 무시, 키가 존재하지 않으면 새 키 만들기sremsrem 키 값1 값2 ....컬렉션 키에서 요소 제거smemberssmembers keyGet all elements in the collectionspopspop key count는 설정된 키에서 개수 요소를 선택하고 해당 요소는 키에서 삭제됩니다srandmember srandmember key countset key에서 count 요소를 선택하고 해당 요소는 키에서 삭제되지 않습니다. sismember 키 멤버세트 키에 멤버 요소가 있는지 확인sintersinter 키 1 key2 key3여러 세트의 교차점 찾기sdiffsdiff key1 key2 key3찾기 다중 집합의 차이sunionsunion key1 key2 key3여러 집합의 합집합을 찾아보세요

응용 시나리오

  • WeChat 복권 애플릿

  • Weibo 좋아요, 컬렉션, 태그

  • Weibo WeChat 팔로우 모델

  • 전자상거래 제품 심사

zset 주문 컬렉션 Type

SortedSet (ZSet) 순서 집합: 요소 자체는 순서가 없고 반복되지 않습니다. 각 요소는 점수별로 정렬될 수 있는 점수와 연관되어 있습니다.

공통 명령

명령 이름 명령 형식 명령 설명
zadd zadd 키 스코어1 멤버1 스코어2 멤버2 ... 순서된 세트 키에 점수가 있는 요소 추가
zrem zrem 키 mem1 mem2 .... 순서된 세트 키에서 요소 제거
zcard zcard key 주문된 집합의 요소 수를 가져옵니다
zcount zcount key min max 점수 값이 [min,max]에 있는 집합의 요소 수를 반환합니다. Interval
zincrby zincrby 키 증분 멤버 는 주문된 세트의 요소 멤버의 점수입니다. 키 플러스 증분
zscore zscore 키 멤버 는 주문된 세트의 요소 멤버의 점수를 반환합니다. set key
zrank zrank key member set 내 멤버의 순위를 가져옵니다. (점수에 따라 작은 것부터 큰 것까지)
zrange zrange key start end 주문한 요소를 가져옵니다. 시작 첨자부터 정지 첨자까지 양의 순서로 키를 설정하세요
zrevrank zrevrank 키 멤버 세트 내 멤버의 순위를 가져옵니다(점수 기준으로 큰 것부터 작은 것까지)
zrevrange zrevrange key start end 시작 첨자부터 정지 첨자까지 순서대로 설정된 키를 가져옵니다. Elements

응용 시나리오

  • 클릭 순위, 판매 순위, 관심 순위

해시 유형

Redis 해시는 필드와 필드 값의 매핑을 제공하는 문자열 유형의 필드와 값 매핑 테이블입니다. 각 해시는 2^32-1 키-값 쌍(40억 개 이상)을 저장할 수 있습니다.

Redis의 데이터 구조에 대한 심층 분석 및 애플리케이션 시나리오에 대한 논의

  • 장점

    • 1. 유사한 데이터를 분류하여 통합하여 저장하므로 데이터 관리가 용이합니다

    • 2. 문자열 연산에 비해 메모리와 CPU를 덜 소모합니다

    • 3. 문자열 저장에 비해 더 많은 공간 절약

    단점
  • 1 만료 기능은 필드에서 사용할 수 없고 키에서만 사용할 수 있습니다
    • 2. 대규모 사용
  • 공용 명령

명령 이름명령 형식명령 설명hset hset 키 필드 값의 키 값 저장 해시 테이블 keyhmsethmset key field1 value1 field2 value2해시 테이블 keyhgethget key field필드가 존재하는지 확인hmgethmget key field1 field2...필드 값 가져오기hsetnxhsetnx 키 필드 값존재하지 않는 해시 테이블 키의 키 값 저장hexistshe 존재한다 key file파일이 존재하는지 여부 판단 hgetallhgetall key여러 필드 값 가져오기hdelhdel 키 field1 field2...지정된 필드 삭제hincrby crement지정된 필드 자동 증가의 hincrby 키 필드hlenhlen key필드 수 가져오기애플리케이션 시나리오

객체 캐시
  • 장바구니 운영
  • bitmap 비트맵 유형
비트맵은 요소에 해당하는 값이나 상태를 비트를 통해 표현하는 비트 연산을 수행하며, 키는 해당 요소 자체입니다. 비트맵 자체는 저장 공간을 크게 절약해 줍니다.

공통 명령

명령 이름명령 형식명령 설명setbit 키 오프셋 값오프셋에서 키의 비트 값 설정 (0 또는 1). getbitgetbit 키 오프셋오프셋에서 키의 비트 값을 가져옵니다.bitcountbitcount key1bitposbitpos 열쇠 value설정된 첫 번째 인덱스 값을 비트 값으로 반환bitopbitop 및[or/xor/not] destkey key [key...]여러 키에 대해 논리 연산을 수행하고 저장합니다. Enter destkey

애플리케이션 시나리오

  • 1. 사용자는 매달 체크인하며, 사용자 ID가 핵심이며, 체크인을 나타내는 날짜가 오프셋 1입니다.
  • 2. 활성 사용자 수를 계산하고, 날짜가 핵심입니다. 활성을 나타내는 오프셋 1입니다
  • 3. 날짜가 키이고 사용자 ID가 오프셋 1입니다. 이는 온라인을 의미합니다.

geo 위치 유형

geo는 위치를 처리하는 데 사용됩니다. 정보. Redis3.2에서 공식적으로 사용됩니다. 주로 Z 순서 곡선, Base32 인코딩 및 geohash 알고리즘을 사용합니다.

geoaddgeoadd 키 경도 위도 멤버 이름 1 경도 1 위도 1 멤버 이름 2 경도 2 위도 2...지리 좌표 추가geoposgeopos 키 멤버 이름 1 멤버 이름 2...georadiusbymember 키 멤버 값 단위 카운트 번호 ASC [DESC] 회원 근처 멤버를 기반으로합니다. 표준 지오해시 문자열 반환 1. 거리 계산 3. "주변 사람" 찾기 스트림 데이터 스트림 유형 stream은 Redis 5.0 이후에 추가된 새로운 데이터 구조로, 영구 메시지 대기열에 사용됩니다. 다음을 포함하여 메시지 대기열의 모든 요구 사항을 거의 충족합니다. 메시지 읽기 차단 및 비차단 각 스트림에는 Redis의 핵심인 고유한 이름이 있습니다. 이는 메시지를 추가하기 위해 xadd 명령을 처음 사용할 때 자동으로 생성됩니다.

돌아가기 회원 위도 및 경도 and geodist
geodist 키 멤버 1 멤버 2 단위 멤버 사이의 교정 거리

georadiusbymember
geohash geohash 키 멤버 이름 1 멤버 이름 2...
적용 시나리오
직렬화된 메시지 ID 생성 메시지 순회
메시지 그룹 소비 미완료 메시지 처리 메시지 큐 모니터링

애플리케이션 시나리오

메시지 큐 사용

더 많은 프로그래밍 관련 지식을 얻으려면

프로그래밍 소개

를 방문하세요! !

위 내용은 Redis의 데이터 구조에 대한 심층 분석 및 애플리케이션 시나리오에 대한 논의의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제