底层数据结构:
一个取端链表的结构,容量是2的32次方减1个元素,大概40多亿,主要功能有push/pop等,一般用在栈、队列、消息队列等场景。left、right都可以插入添加:
- 如果键不存在,创建新的链表;
- 如果键已存在,新增内容;
- 如果值全移除,对应的键也就消失了。
它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。
lpush/rpush/lrange
lpush:从列表的左侧插入元素(头部插入)。
rpush:从列表的右侧插入元素(尾部插入)。
lrange:获取列表中指定区间的元素(索引从 0 开始,支持负数)。
LPUSH mylist "a"
LPUSH mylist "b"
LPUSH mylist "c"
// 得到["c", "b", "a"]
RPUSH mylist "1"
RPUSH mylist "2"
RPUSH mylist "3"
//得到["1", "2", "3"]
LRANGE mylist 0 -1 // 得到整个列表
注意:没有rrange
lpop/rpop
lpop: 从左边(头部)弹出并返回列表的第一个元素。
LPUSH mylist "a" "b" "c" # 列表变为 ["c", "b", "a"]
LPOP mylist # 返回 "c"
rpop:从右边(尾部)弹出并返回列表的最后一个元素。
RPUSH mylist "1" "2" "3" # 列表变为 ["1", "2", "3"]
RPOP mylist # 返回 "3"
lindex key index
按照索引下标获得元素【从上到下】
127. 0. 0. 1:6379> LRANGE list1 0 - 1
1) "4"
2) "3"
3) *2"
127.0. 0. 1: 6379> LINDEX list1 0127. 0. 0. 1: 6379> LINDEX list1 2
"2"
llen
获取列表中元素的个数
llen list1 //返回3
lrem key 数字N 给定值v1
删除n个值等于v1的元素
从left往right删除2个值等于v1的元素,返回的值为实际删除的数量
LREM list3 0 给定值 表示删除全部给定的值。零个就是全部值
LREM list3 2 v1 //删除list3中2个值等于v1的元素
Itrim key 开始index 结束index
截取指定范围的值后再赋值给Key
127.0.0.1:6379> 1push list1 0 1 2 3 4 5 6 789
(integer) 10
127.0.0.1:6379> LRANGE list1 0 -1
1) "9"
2) "8"
3) "7"
4) "6"
5) "5"
6) "4"
7) "3"
8) "2"
9) "1"
10) "0"
127.0.0.1:6379:LTRIM list1 3 5
OK127.0.0.1:6379:LTRIM list1 0 -1
1) "6"
2) "5"
3) "4"
rpoplpush 源列表 目的列表
从源列表右侧弹出一个元素,并 从左侧压入 目的列表,返回弹出的元素。
127.0. 0. 1:6379> LRANGE list1 0 - 1
1) "2"
2) "2"
3) *2"
4) 11"
127.0. 0. 1:6379> LRANGE list2 0 -1
1) "11"
2) "22"
3) "33"
4) "44"
5) "55"
127. 0. 0. 1: 6379> RPOPLPUSH list1 list2
"1"
127.0. 0. 1: 6379> LRANGE list1 0 - 1
1) "2"
2) "2"
3) "2"
Iset key index value
设置列表中指定索引位置的元素值。
127.0. 0. 1:6379> LRANGE list1 0 - 1
1) "2"
2) "2"
3) "2"
127. 0. 0.1:6379> LSET list1 1 mysql
OK
127.0. 0.1:6379> LRANGE list1 0-1
1) "2"
2) "mysql"
3) "2"
Iinsert key befor/after 已有值 插入的新值
-
key
:列表的 key(必须已存在) -
BEFORE
或AFTER
:表示将新值插入在已有值的前面或后面
RPUSH mylist "one" "two" "three"
LINSERT mylist BEFORE "two" "1.5"// 列表变为 ["one", "1.5", "two", "three"]