[Redis 필기 (4)] Redis 데이터 구조 - list 링크
앞에서 소개 한 바 와 같이 우 리 는 Redis 에서 string 문자열, hash 해시 라 는 두 가지 데이터 구조의 상용 명령 을 배 웠 다.이 글 은 Redis 의 list – 목록 에 대한 동작 을 소개 합 니 다.
만약 당신 이 string 과 hash 가 무엇 인지 모른다 면, 먼저 나의 앞의 두 문장 을 볼 수 있 습 니 다.
Redis 의 list 유형 은 사실 string 형식의 양 방향 링크 입 니 다.데이터 구 조 를 배 운 어린이 신발 은 양 방향 링크 인 만큼 머리 나 꼬리 에서 요 소 를 삽입 하고 삭제 하 는 것 을 쉽게 찾 을 수 있다 는 것 을 잘 알 고 있다.이렇게 하면 list 는 스 택 이나 대기 열 로 사용 할 수 있 습 니 다.Redis 에서 list 의 최대 길 이 는 2 ^ 32 - 1 입 니 다.
list 관련 명령
1. lpush 명령
lpush 명령 은 목록 의 머리 에 하나 이상 의 요 소 를 삽입 합 니 다. 지정 한 key 가 존재 하지 않 으 면 빈 목록 을 만 듭 니 다. 지정 한 key 가 list 형식 이 아니라면 오 류 를 되 돌려 줍 니 다.구체 적 인 형식 은:
lpush key value...
예시 1:
127.0.0.1:6379> lpush mylist a b c
(integer) 3
127.0.0.1:6379> set mystr not_a_list
OK
127.0.0.1:6379> lpush mystr d
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379>
2. lrange 명령
위 에서, 우 리 는 lpush 명령 을 사용 하여 목록 에 요 소 를 추 가 했 습 니 다. 그러면 지정 한 요소 가 목록 에 삽입 되 었 다 는 것 을 어떻게 압 니까?이것 은 목록 에서 지정 한 범위 의 요 소 를 볼 수 있 는 lrange 명령 을 사용 할 수 있 습 니 다.이 명령 의 구체 적 인 형식 은 다음 과 같다.
lrange key start stop
lrrange 명령 에 대해 우 리 는 몇 가 지 를 알 아야 합 니 다.
127.0.0.1:6379> lpush mylist a b c
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "c"
2) "b"
3) "a"
3. lpushx 명령
lpushx 명령 도 목록 머리 에 요 소 를 삽입 하 는 데 사 용 됩 니 다.lpush 와 달리 키 가 존재 하지 않 을 때 이 명령 은 빈 목록 을 만 들 지 않 습 니 다. 다른 하 나 는 아무런 조작 도 하지 않 고 바로 돌아 갑 니 다.구체 적 인 형식 은 다음 과 같다.
lpushx key value
예시 3:
127.0.0.1:6379> lpushx mylist a
(integer) 0
127.0.0.1:6379> lrange mylist 0 -1
(empty list or set)
127.0.0.1:6379> lpush mylist a
(integer) 1
127.0.0.1:6379> lpushx mylist b
(integer) 2
127.0.0.1:6379> lrange mylist 0 -1
1) "b"
2) "a"
4. rpush 명령
앞에서 소개 한 바 와 같이 list 는 실제 적 으로 양 방향 링크 입 니 다. rpush 명령 을 사용 하여 목록 의 끝 에 하나 이상 의 요 소 를 삽입 할 수 있 습 니 다.이 명령 은 작업 이 성공 하면 목록 의 길 이 를 되 돌려 줍 니 다.구체 적 인 형식 은 다음 과 같다.
rpush key value
예시 4:
127.0.0.1:6379> lpush mylist a b c
(integer) 3
127.0.0.1:6379> rpush mylist d e f
(integer) 6
127.0.0.1:6379> lrange mylist 0 -1
1) "c"
2) "b"
3) "a"
4) "d"
5) "e"
6) "f"
5. rpushx 명령
rpushx 명령 은 목록 끝 에 요 소 를 삽입 합 니 다.rpush 와 달리 지정 한 목록 이 존재 하지 않 을 때 이 명령 은 빈 목록 을 만 들 지 않 고 바로 돌아 갑 니 다.구체 적 인 형식 은 다음 과 같다.
rpushx key value
예시 5:
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> rpushx mylist a
(integer) 0
127.0.0.1:6379> lrange mylist 0 -1
(empty list or set)
127.0.0.1:6379> lpush mylist a
(integer) 1
127.0.0.1:6379> rpushx mylist b
(integer) 2
127.0.0.1:6379> lrange mylist 0 -1
1) "a"
2) "b"
6. lpop 명령
lpop 명령 은 list 의 헤더 요 소 를 제거 하고 되 돌려 줍 니 다.목록 이 비어 있 으 면 nil 로 돌아 갑 니 다.구체 적 인 형식 은 다음 과 같다.
lpop key
예시 6:
127.0.0.1:6379> lpush mylist a
(integer) 1
127.0.0.1:6379> lpop mylist
"a"
127.0.0.1:6379> lpop mylist
(nil)
7. rpop 명령
rpop 명령 은 목록 의 끝 요 소 를 제거 하고 되 돌려 줍 니 다. 목록 이 비어 있 으 면 nil 로 돌아 갑 니 다.구체 적 인 형식 은 다음 과 같다.
rpop key
예시 7:
127.0.0.1:6379> lpush mylist a b
(integer) 2
127.0.0.1:6379> rpop mylist
"a"
127.0.0.1:6379> rpop mylist
"b"
8. lrem 명령
lrem 명령 은 목록 에서 이전 count 번 에 나타 난 값 이 value 인 요 소 를 제거 하고 제 거 된 요소 의 개 수 를 되 돌려 줍 니 다.구체 적 인 형식 은 다음 과 같다.
lrem key count value
그 중 count 의 의 미 는 다음 과 같다.
127.0.0.1:6379> lpush mylist a b a b c a e f
(integer) 8
127.0.0.1:6379> lrem mylist 0 a
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "f"
2) "e"
3) "c"
4) "b"
5) "b"
127.0.0.1:6379>
9. ltrim 명령
lrim 명령 은 지정 한 목록 을 자 르 고 아래 표 시 된 범 위 를 [start, stop] 로 유지 하 는 데 사 용 됩 니 다.이 가운데 start, stop 은 모두 0 부터 계산 되 며, 목록 꼬리 와 의 오프셋 을 음수 로 표시 하 는 것 도 지원 합 니 다.구체 적 인 형식 은 다음 과 같다.
ltrim key start stop
예시 9:
127.0.0.1:6379> lpush mylist a b c d e f // f e d c b a
(integer) 6
127.0.0.1:6379> ltrim mylist 0 2
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "f"
2) "e"
3) "d"
10. lindex 명령
lindex 명령 은 목록 에서 아래 표 시 된 요 소 를 되 돌려 줍 니 다. 아래 표 시 는 0 부터 계산 하고 마이너스 로 목록 끝 에서 시작 하 는 오프셋 값 을 표시 할 수 있 습 니 다.지정 한 아래 표 가 목록 의 아래 표 범 위 를 초과 하면 nil 로 돌아 갑 니 다.구체 적 인 형식 은 다음 과 같다.
lindex key index
예시 10:
127.0.0.1:6379> lpush mylist a b c d e f
(integer) 6
127.0.0.1:6379> lindex mylist 2
"d"
11. llen 명령
llen 명령 은 목록 의 길 이 를 되 돌려 줍 니 다. 지정 한 목록 이 존재 하지 않 으 면 Redis 는 빈 목록 으로 하고 길 이 를 0 으로 되 돌려 줍 니 다.구체 적 인 형식 은 다음 과 같다.
llen key
예시 11:
127.0.0.1:6379> lpush mylist 1 2 3
(integer) 3
127.0.0.1:6379> llen mylist
(integer) 3
12. linsert 명령
linsert 는 명령 을 삽입 합 니 다. 목록 에서 지정 한 요 소 를 찾 고 이 요소 앞 이나 뒤에 요 소 를 삽입 합 니 다.지정 한 목록 이 존재 하지 않 으 면 아무런 조작 도 하지 않 습 니 다.이 명령 의 반환 값 은 삽입 작업 을 실행 한 후 목록 의 길이 이 며, 지정 한 값 을 찾 지 못 하면 - 1 을 되 돌려 줍 니 다.구체 적 인 형식 은 다음 과 같다.
linsert key after|before search value
예시 12:
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> rpush mylist a b c d
(integer) 4
127.0.0.1:6379> linsert mylist before b b1
(integer) 5
127.0.0.1:6379> lrange mylist 0 -1
1) "a"
2) "b1"
3) "b"
4) "c"
5) "d"
127.0.0.1:6379> linsert mylist before z no
(integer) -1
13. rpoplpush 명령
rpoplpush 명령 은 두 목록 을 원자 로 조작 합 니 다. 목록 source 의 꼬리 요 소 를 꺼 내 dest 목록 의 머리 에 넣 습 니 다.목록 source 가 존재 하지 않 으 면 nil 값 을 되 돌려 주 고 아무런 조작 도 하지 않 습 니 다.구체 적 인 형식 은 다음 과 같다.
rpoplpush source dest:
예시 13:
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> rpush mylist1 a b
(integer) 2
127.0.0.1:6379> rpush mylist2 c d
(integer) 2
127.0.0.1:6379> rpoplpush mylist1 mylist2
"b"
127.0.0.1:6379> lrange mylist1 0 -1
1) "a"
127.0.0.1:6379> lrange mylist2 0 -1
1) "b"
2) "c"
3) "d"
14. lset 명령
lset 명령 은 아래 표 시 된 요소 의 값 을 설정 하 는 데 사 용 됩 니 다.구체 적 인 형식 은 다음 과 같다.
lset key index value
예시 14:
127.0.0.1:6379> rpush mylist a b
(integer) 2
127.0.0.1:6379> lset mylist 0 c
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "c"
2) "b"
그 밖 에 list 의 pop 작업 은 차단 버 전이 있 습 니 다.
blpop key timeout
brpop key timeout
brpoplpush source destination timeout
timeout 은 시간 초과 기다 리 기 위해, timeout 이 0 이면 계속 기 다 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.