Redis--List篇

一、list简介

Redis列表是简单的字符串列表,按照插入顺序排序,可以在头部或尾部插入数据。底层是一个双向链表
list实现了一个key对应多个value,这些value被维护在一个链表中。

二、常用指令

1.lpush […]

向key对应的列表头部插入数据

127.0.0.1:6379> lpush k1 1 2 3
(integer) 3
127.0.0.1:6379> lrange k1 0 -1
1) "3"
2) "2"
3) "1"

2.rpush […]

向key对应的列表尾部插入数据

127.0.0.1:6379> rpush k1 9 9
(integer) 6
127.0.0.1:6379> lrange k1 0 -1
1) "2"
2) "3"
3) "2"
4) "1"
5) "9"
6) "9"

3.lpop

从key对应的列表头部弹出数据

127.0.0.1:6379> lrange k1 0 -1
1) "2"
2) "3"
3) "2"
4) "1"
5) "9"
6) "9"
127.0.0.1:6379> lpop k1
"2"

注意,若弹出数据后key对应的列表为空,key也会被删除。(值在键在,值亡键亡)

4.rpop

从key对应的列表尾部弹出数据

5.rpoplpush

从source的尾部弹出元素并插入dest头部。

6.lrange

显示下标从start到stop的元素,若下标为负数表示从右到左数

127.0.0.1:6379> lpush k1 5 6 3 2 1
(integer) 5
127.0.0.1:6379> lrange k1 0 -2
1) "1"
2) "2"
3) "3"
4) "6"

7.lindex

显示key对应的列表下标为index的元素:

127.0.0.1:6379> lrange k1 0 -1
1) "1"
2) "2"
3) "3"
4) "6"
5) "5"
127.0.0.1:6379> lindex k1 3
"6"

8.linsert before|after

查找list中第一个值为pivot的元素并在其前面或后面插入value,若找不到则拒绝插入;

127.0.0.1:6379> lrange k1 0 -1
1) "1"
2) "2"
3) "3"
4) "3"
5) "6"
6) "5"
127.0.0.1:6379> linsert k1 before 3 99
(integer) 7
#未找到100拒绝插入
127.0.0.1:6379> linsert k1 before 100 100
(integer) -1

9.lrem

从左到右移除count个值为value的元素,若list中value元素小于count个,则全部移除。

10.lset

设置下标为index的元素的值。若越界则报错,否则修改。

二、底层数据结构

list的底层数据结构是quicklist,当元素较少时list被分配在一块连续的内存区域,也就是ziplist。而当元素变多时,数据会分配在多个ziplist中,通过指针链接形成双向链表,这个链表就是quicklist。
Redis--List篇_第1张图片
使用这种结构在保证了快速插入删除的同时减少了内存的开销,因为节省了存储大量的next和prev指针的空间。

你可能感兴趣的:(redis,redis,list,链表)