>데이터 베이스 >Redis >Redis 학습 기본 데이터 구조

Redis 학습 기본 데이터 구조

coldplay.xixi
coldplay.xixi앞으로
2020-12-04 15:44:027971검색

Redis 사용법 튜토리얼이 열은 기본 데이터 구조를 소개합니다

Redis 학습 기본 데이터 구조

권장(무료): redis 사용법 튜토리얼

Redis 기본 데이터 구조

Redis에는 5가지 기본 데이터 구조가 있습니다: 문자열(문자열), 목록( list), set(집합), hash(해시), zset(ordered set)

string string

문자열 유형은 Java 언어의 ArrayList(숫자 목록)와 유사하게 Redis 값의 가장 간단한 데이터 구조입니다. , 그러나 Redis의 문자열은 동적 문자열입니다.

Redis의 문자열은 중복 공간을 사전 할당하는 방법을 사용합니다

[이미지 업로드 실패...(image-724c60-1537973556456)]

set & get

>set keyname test
OK

>get keyname
test

//key如果存在就返回0
>setnx keyname test
0

>exists keyname

>del keyname
1

//批量设置
>mset key1 test1 key2 test2
OK

//批量获取
>mget key1 key2
1) test1
2) test2

key가 만료되었습니다.

//设置5s后过期
>expire keyname 5

//setex是expire和set的复合写法
>setex keyname 5 test
OK

//5s后查询
>get keyname
NULL

count
ps: 값이 숫자인 경우 incr 및 incrby를 사용하여 count

>set num 10
OK

//incr默认加1
>incr num
11

//incrby后面要加上数字
>incrby num
ERR wrong number of arguments for 'incrby' command

//正确计数
>incrby num 5
16

list

다음은 redis의 또 다른 데이터 구조인 list를 소개합니다
앞서 Redis에 대해 이야기했습니다. 문자열은 다음과 유사합니다. Java 언어의 ArrayList와 Redis의 목록은 LinkList(연결 목록)와 유사합니다. 연결 목록의 한 가지 특별한 기능은 업데이트 및 추가 속도가 매우 빠르지만 인덱스 쿼리 속도가 느리다는 것입니다.

왜 링크리스트와 비슷하다고 하는 걸까요? 왜냐하면 Redis 리스트는 실제로는 퀵리스트(quicklist)의 형태이기 때문입니다.

[이미지 업로드에 실패했습니다. ...(image-625c1b-1537973556457 )]

ziplist란 무엇인지 소개하겠습니다. 사실 연속적인 메모리 공간입니다

그림에서 볼 수 있듯이 퀵 리스트는 실제로 압축 리스트와 양방향 포인터로 구성되어 있습니다. 하지만 우리는 연결 리스트에 포인터가 두 개 있다는 것을 알고 있습니다. 이전 실행과 다음 실행은 빠른 목록이며 링크 목록의 한 가지 차이점입니다.

PS: 그러면 redis를 설계할 때 왜 양방향 포인터로 변경했나요? 연결된 리스트처럼 prev와 next 두 개의 포인터를 사용하면 순회도 가능하지만 양방향 포인터는 상대적으로 적은 메모리 공간을 차지한다는 분명한 이점이 있습니다.

큐와 스택

/* 队列:First in first out */

//加两个value
>rpush keynames key1 key2
2

//计算
>llen keynames
2

>lpop keynames
key1

>lpop keynames
key2

//rpush会自动过期的
>rpop keynames
NULL

/* 栈:First in last out */

//同样,加两个元素
>rpush keynames key1 key2
2

>rpop keynames
key2

>rpop keynames
key1
사전 해시

Redis의 사전은 자바 언어의 해시맵과도 비슷합니다. 또한 순서가 지정되지 않은 2차원 구조, 즉 배열에 목록을 더한 구조입니다. 이는 redis 사전 및 해시맵과 유사합니다.

그리고 rehash 및 사전 새로 고침 작업과 같은 차이점도 있습니다. Hashmap은 사전이 충분하면 성능이 좋지 않으므로 redis가 변형되어

progressive 접근 방식을 채택합니다. 진보라고? Redis는 모두 다시 로드하지 않고 이전 사전과 새 사전을 저장한 다음 예약된 작업을 사용하여 이전 해시의 데이터를 새 해시로 이동하기 때문에 해시 메모리 공간이 재활용됩니다

사전 배열( 해시) 및 링크 구조:

[이미지 업로드 실패...(image-f5660f-1537973556457)]

>hset keynames key1 "test1"
1

>hset keynames key2 "test2"
1

//批量set
>hmset keynames key1 "test1" key2 "test2"
OK

//获取key1的值
>hget keynames key1
test1

//获取hash为keynames的长度
>hlen keynames
2

//获取全部
>hgetall keynames
1) key1
2) test1
3) key2
4) test2
set set

redis 세트와 Java 언어의 해시 세트 유형은

순서가 없고 고유합니다.

>sadd keynames key1
1

//key1已经加过了,所以返回1
>sadd keynames key1 key2
1

>smembers keynames
1) key2
2) key1

//查询某个key是否存在,相当与contains
>sismember keynames key1
1

//相当于count
>scard keynames
2

//随意弹出key1
>spop keynames
key1
Ordered set zSet

Ordered set은 Redis에서 더 독특합니다. SortedSet과 HashMap의 조합과 유사합니다. 내부 구현은 점프 목록이라는 데이터 구조입니다. 한편, 순서가 지정된 집합은 집합이므로 각 요소는 고유하며 각 값에 점수를 할당한 다음 이 점수에 따라 정렬할 수 있습니다.

ps: 이러한 이유로 주문한 세트는 팬 정보를 저장하는 데 사용될 수 있으며 값은 팬 ID, 점수는 팔로우 시간

//9.0是score也就是权重
>zadd keyname 9.0 math
1

>zadd keyname 9.2 history
1

//顺序
>zrange keyname 0 -1
1) history
2) math

//逆序
>zrevrange keyname 0 -1
1) math
2) history

//相当于count()
>zcard keyname
2

获取指定key的score
>zscore keyname math
9
Jump list TODO

위 내용은 Redis 학습 기본 데이터 구조의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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