Redis--List篇

一、list简介

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

二、常用指令

1.lpush <key> <value> [<value>…]

向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> <value> [<value>…]

向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>

从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>

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

5.rpoplpush <source> <destination>

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

6.lrange <start> <stop>

显示下标从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>

显示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 <key> before|after <pivot>

查找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 <key> <count>

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

10.lset <key> <index>

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

二、底层数据结构

list的底层数据结构是quicklist,当元素较少时list被分配在一块连续的内存区域,也就是ziplist。而当元素变多时,数据会分配在多个ziplist中,通过指针链接形成双向链表,这个链表就是quicklist。

使用这种结构在保证了快速插入删除的同时减少了内存的开销,因为节省了存储大量的next和prev指针的空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值