list는 삽입 순서로 정렬된 문자열 배열입니다(일반 용어로는 여전히 문자열을 저장합니다). 목록의 헤드(왼쪽) 또는 꼬리(오른쪽)에 요소를 추가할 수 있으며 목록에는 최대 ^32-1개의 요소(목록당 40억 개 이상의 요소)가 포함될 수 있습니다.
Redis의 목록은 Java의 LinkedList와 매우 유사합니다. 맨 아래 계층은 연결 목록 구조로, 목록의 삽입 및 삭제 작업은 시간 복잡도가 0(1)으로 매우 빠릅니다. 배열 구조의 삽입 및 삭제 작업이 필요합니다. 표면적으로는 여전히 목록이지만 Redis의 기본 목록 구현은 단순한 이중 연결 목록으로 제한되지 않습니다.
데이터 양이 적을 경우 기본 저장 구조는 ziplist(압축 목록)라고 하는 연속 메모리입니다. 데이터 양이 클 경우에는 모든 요소를 밀접하게 저장하고 연속 메모리를 할당합니다. 퀵리스트(quick linked list) 구조가 됩니다.
그러나 간단한 연결 목록에도 결함이 있습니다. 연결 목록의 이전 및 다음 포인터는 더 많은 메모리를 차지하고 공간을 낭비하며 메모리 조각화를 증가시킵니다. Redis 3.2부터 Redis는 ziplist와 Linked List로 구성된 하이브리드 데이터 구조 Quicklist(Quick Linked List)를 사용합니다.
lpush 키 값
lpush key value
从左边插入元素(将一个或多个值插入到列表头部)
127.0.0.1:6379> lpush ids 1 (integer) 1 127.0.0.1:6379> lrange ids 0 -1 1) "1" 127.0.0.1:6379> lpush ids 2 (integer) 2 127.0.0.1:6379> lrange ids 0 -1 1) "2" 2) "1"
rpush key value
从右边插入元素(将一个或多个值插入到列表的尾部(最右边))
127.0.0.1:6379> rpush ids 3 (integer) 3 127.0.0.1:6379> lrange ids 0 -1 1) "2" 2) "1" 3) "3"
linsert key BEFORE|AFTER pivot value
向某个元素前/后插入元素,返回结果为当前列表长度,注意列表不存在或者指定元素不存在列表中时,都将不执行任何操作。
//元素3前插入0 127.0.0.1:6379> linsert ids before 3 0 (integer) 4 127.0.0.1:6379> lrange ids 0 -1 1) "2" 2) "1" 3) "0" 4) "3" //元素3后插入0 127.0.0.1:6379> linsert ids after 3 4 (integer) 5 127.0.0.1:6379> lrange ids 0 -1 1) "2" 2) "1" 3) "0" 4) "3" 5) "4"
lrange key start end
获取列表中指定范围内的元素列表;若start值大于列表end值则返回空列表
如上已经展示过了
lindex key index
获取列表指定索引下标的元素
127.0.0.1:6379> lindex ids 0 "2" 127.0.0.1:6379> lindex ids -1 "4"
llen key
获取列表长度;列表不存在则返回0
127.0.0.1:6379> llen ids (integer) 5
lpop key
从列表左侧弹出元素并返回头部元素
127.0.0.1:6379> lpop ids "2" 127.0.0.1:6379> lrange ids 0 -1 1) "1" 2) "0" 3) "3" 4) "4"
rpop key
从列表右侧弹出元素并返回尾部元素
127.0.0.1:6379> rpop ids "4" 127.0.0.1:6379> lrange ids 0 -1 1) "1" 2) "0" 3) "3"
lrem key count value
从列表中找到等于value的元素进行删除,根据count的不同分为三种情况:
count > 0,从表头开始向表尾,移除数量为count个元素;
count count = 0,移除表中所有与 value 相等的值
127.0.0.1:6379> lrem ids 0 3 (integer) 1 127.0.0.1:6379> lrange ids 0 -1 1) "1" 2) "0"
ltrim key start end
对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除
127.0.0.1:6379> ltrim ids 0 0 OK 127.0.0.1:6379> lrange ids 0 -1 1) "1"
lset key index value
왼쪽부터 요소 삽입(목록의 선두에 하나 이상의 값 삽입)
127.0.0.1:6379> lset ids 0 0 OK 127.0.0.1:6379> lrange ids 0 -1 1) "0"
rpush 키 값
오른쪽에서 요소 삽입(목록의 꼬리(가장 오른쪽)에 하나 이상의 값 삽입)
rrreee
linsert key BEFORE|AFTER 피벗 값
요소로 전달/요소 삽입 후 반환 결과는 현재 목록 길이입니다. 목록이 없거나 지정된 요소가 목록에 없으면 작업이 수행되지 않습니다.
rrreee
쿼리 명령lrange key start end
위와 같이
lindex 키 인덱스
목록의 지정된 인덱스 첨자에서 요소를 가져옵니다.rrreee
llen 키
목록의 길이를 가져옵니다. 목록이 없으면 0
rrreee
lpop 키
rrreeerpop key
lrem 키 개수 값
목록에서 value와 같은 요소를 찾아서 삭제합니다. 는 개수에 따라 세 가지 상황으로 나뉩니다.
count > 0, 테이블 끝에서 시작하여 count 요소 제거count count = 0, 테이블의 값과 동일한 모든 값 제거 🎜rrreee🎜ltrim key start end
🎜목록 자르기, 즉 목록만 삭제 지정된 범위 내의 요소를 유지하고 지정된 범위 내에 없는 요소는 삭제됩니다🎜rrreee🎜수정 명령🎜🎜lset 키 인덱스 값
🎜지정된 첨자가 있는 요소의 값을 수정하고 다음으로 설정합니다. value🎜rrreee🎜팝업 차단 명령🎜🎜blpop key [key …] timeout🎜목록의 첫 번째 요소를 제거하고 가져옵니다. 목록에 요소가 없으면 차단됩니다. 목록은 시간 초과(초 단위)될 때까지 기다립니다. ) 또는 팝 가능한 요소가 발견되었습니다🎜🎜brpop key [key …] timeout🎜 목록의 마지막 요소를 제거하고 가져옵니다. 목록에 요소가 없으면 대기 시간이 초과될 때까지 목록이 차단됩니다. 팝업 요소가 발견되었습니다. 🎜데모: 🎜3개의 리드 연결 창을 엽니다. 첫 번째는 blpop을 실행하고, 두 번째는 brpop을 실행하고, 세 번째는 add를 실행합니다. 🎜실행 후 여기에서 Windows 1과 2가 차단된 것을 볼 수 있습니다. 이는 ids에 요소가 없기 때문입니다 🎜🎜🎜🎜🎜🎜🎜🎜Window 3은 추가를 실행합니다: lpush ids 1 2 3 4 5 6🎜Windows 1과 2에서 해당 요소가 즉시 나타나는 것을 볼 수 있습니다: 🎜🎜 🎜🎜🎜🎜🎜🎜애플리케이션 시나리오 🎜🎜메시지 대기열: lpop 및 rpush(또는 반대로 lpush 및 rpop)는 대기열 기능을 구현할 수 있습니다. 🎜🎜 좋아요 목록, 댓글 목록 및 친구 서클의 순위 목록: lpush 명령 및 lrange 명령은 lpush 명령을 통해 매번 최신 목록 기능을 구현할 수 있습니다. 목록에 새 요소를 삽입한 다음 lrange 명령을 통해 최신 요소 목록을 읽습니다. 🎜
위 내용은 redis의 list 데이터 타입에 관련된 명령어 분석 및 사용법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!