Lists
- List는 String values가 linked list라 생각하면 되고 Head와 Tail에서 PUSH/POP 연산을 이용하여 데이터를 넣고 뺄 수 있다.
- 한 key 에 넣을 수 있는 요소의 최대 개수는 4,294,967,295 개이다.
- Head 와 Tail에 데이터를 넣고 뺴는 건 속도가 빠르지만 중간에 데이터를 삽입하거나 삭제하는 어렵다.
LPUSH / RPUSH - 데이터 삽입
- LPUSH는 키에 저장된 목록에 좌측(왼쪽)에 지정된 값을 삽입한다.
- RPUSH는 키에 저장된 목록에 우측(오른쪽)에 지정된 값을 삽입한다.
- LPUSH와 RPUSH 모두 키가 없다면 빈 목록을 생성한 후에 처리한다.
redis:6379> lpush work:queue:ids 101
(integer) 1
redis:6379> rpush work:queue:ids 102
(integer) 2
LPOP / RPOP - 데이터 삭제
LPOP은 맨 좌측에 있는 요소를 제거 후 제거한 값을 리턴한다, RPOP은 맨 우측에 있는 요소를 제거 후 제거한 값을 리턴한다.
redis:6379> LPOP work:queue:ids
"101"
redis:6379> RPOP work:queue:ids
"102"
LRANGE - 데이터 출력
LRANGE는 key에 존재하는 요소들을 startindex, endindex 를 입력받아 목록을 보여준다.
redis:6379> lpush work:queue:ids 101
(integer) 1
redis:6379> lpush work:queue:ids 102
(integer) 2
redis:6379> lpush work:queue:ids 103
(integer) 3
redis:6379> lrange work:queue:ids 0 3
1) "103"
2) "102"
3) "101"
아래 예시에서 startindex는 0, endindex는 10이기 때문에 0번 index부터 3번 인덱스 까지 보여준다.
// 데이터 추가 입력
redis:6379> lpush work:queue:ids 104
(integer) 4
redis:6379> lpush work:queue:ids 105
(integer) 5
redis:6379> lpush work:queue:ids 106
(integer) 6
// 현재 데이터들
redis:6379> lrange work:queue:ids 0 10
1) "106"
2) "105"
3) "104"
4) "103"
5) "102"
6) "101"
- endindex에 리스트 길이보다 큰 입력을 하는 경우 특정 메시지는 발생하지 않는다. 즉 범위 에러는 발생하지 않는다.
List 전체를 조회할 경우 startindex에 0을 endindex에 -1을 입력하면 된다.
// 전체 조회
redis:6379> lrange work:queue:ids 0 -1
1) "106"
2) "105"
3) "104"
4) "103"
5) "102"
6) "101"
index 3번째 데이터부터 마지막을 조회하는 경우
redis:6379> lrange work:queue:ids 2 -1
1) "104"
2) "103"
3) "102"
4) "101"
startindex에 마이너스를 입력할 수 있는데 이 경우는 데이터를 오른쪽에서부터 세어진다.
redis:6379> lrange work:queue:ids -2 -1
1) "102"
2) "101"
위 예시의 startindex가 -2이니 맨 끝에서 즉 index가 6번에서부터 뒤로 2 정도 떨어진 위 ( 6 → 5) 를 한 값인 5번째 index가 startindex로 시작하는 것을 확인할 수 있다.
- 참고로 4가 아닌 이유는 0부터 세기 때문이다.
LLEN - 데이터 길이
list의 길이를 구할 수 있다.
redis:6379> llen work:queue:ids1
(integer) 9
key가 존재하지 않는 경우 0을 반환한다
redis:6379> llen work:queue:ids2
(integer) 0
LSET - 데이터 검색
list에 존재하는 특정 index의 값을 변경한다.
redis:6379> lset work:queue:ids 0 1066
OK
redis:6379> lrange work:queue:ids 0 10
1) "1066"
2) "105"
3) "104"
4) "103"
5) "102"
6) "101"
LREM - 데이터 삭제
list에 존재하는 요소를 삭제하는 명령이다. 입력받은 count를 기준으로 count가 0보다 작다면 오른쪽, 크다면 왼쪽부터, 같다면 모든 값들을 삭제한다.
Example) 데이터 초기화
redis:6379> rpush my_list 09
(integer) 1
redis:6379> rpush my_list 01
(integer) 2
redis:6379> rpush my_list 02
(integer) 3
redis:6379> rpush my_list 01
(integer) 4
redis:6379> rpush my_list 09
(integer) 5
redis:6379> lrange my_list 0 -1
1) "09"
2) "01"
3) "02"
4) "01"
5) "09"
Example) count가 0인 경우
redis:6379> lrem my_list 0 01
(integer) 2
redis:6379> lrange my_list 0 -1
1) "09"
2) "02"
3) "09"
Example) count가 0보다 작으니까 오른쪽부터 지움
redis:6379> lrange my_list 0 -1
1) "09"
2) "01"
3) "02"
4) "09"
Example) count가 0보다 크니 왼쪽부터 지움
redis:6379> lrem my_list 1 01
(integer) 1
redis:6379> lrange my_list 0 -1
1) "09"
2) "02"
3) "09"
LPUSHX / RPUSHX - 데이터 삽입
키가 이미 있고 목록이 있는 경우에만 값을 삽입한다 (L은 왼쪽, R은 오른쪽)
Exampe) 키가 없는 경우
redis:6379> lpushx my_list2 01
(integer) 0
Example) 키가 있는 경우
redis:6379> lpush my_list2 01
(integer) 1
redis:6379> lpushx my_list2 02
(integer) 2
redis:6379> lpushx my_list2 03
(integer) 3
'Server > Redis' 카테고리의 다른 글
Redis, Collections - Sorted Set (0) | 2022.12.03 |
---|---|
Redis, Collections - Hashes (0) | 2022.11.27 |
Redis, Collection - Sets (0) | 2022.11.27 |
Redis, Collection - Strings (0) | 2022.11.27 |
Redis란 (0) | 2022.11.26 |