Redis【5】—— List类型

四、各类型指令介绍

(三)List类型

1. 基本指令

 lpush k1 1 2 3 4
 lpush k1 5 6 7 8

 # 两边都是闭区间 且 下标支持负数
 lrange k1 0 -1
 lrange k1 0 7
 lrange k1 0 100 # 下标越界的话将尽可能获取

image.png

keys *
lpushx key 1 2 3 4 5 # 会检查 key 是否 exists

lpush key 1 2 3
rpush key 0 -1 -2
lrange key 0 -1

rpushx k2 1 2 3

image.png
image.png
image.png

lrange key 0 -1
lpop key
lpop key

lrange key 0 -1

rpop key
rpop key

lrange key 0 -1

image.png

rpush key 0 1 2 3 4 5 6 7
lrange key 0 -1

lindex key 3
lindex key -1
lindex key 100

image.png

# 找的是第一个出现的基准值
lrange key 0 -1
linsert key before 2 100 # 插入到下标是2的元素之前
lrange key 0 -1

linsert key after 2 100 # 插入到下标是2的元素之后
lrange key 0 -1

# 获取列表长度
llen k1
llen key

image.png
image.png

# lrem 指定元素删除
# count > 0 从左向右找删除 count 个 element
# count = 0 删除所有的 element
# count < 0 从右向左找删除 count 个 element
lrange key 0 -1
lrem key 2 1 # 删除 前2个 1
lrem key -2 1 # 删除 后2个 1
lrem key 0 2 # 删除所有 2
lrange key 0 -1


# ltrim 保留[start, stop]
rpush key 0 1 2 3 4 5 6 7 8 9 10
ltrim key 2 8 # 保留下标 [2, 8] 的数值

image.png
image.png

rpush key 0 1 2 3 4 5 6 7 8 9 10
lrange key 0 -1
lset key 5 50 # lindex访问下标越界会返回nil,lset则直接报错
lrange key 0 -1

image.png

# blpop brpop阻塞版本的命令
# (1)如果队列为空,尝试出队列,就会产生阻塞。直到队列不空,阻塞解除 √
# 如果队列为满,尝试入队列,也会产生阻塞。直到队列不满,阻塞解除 ×
# (2)但此处 Redis 在阻塞期间(也就说有超时时间)也可以正常处理其他请求
# (3)若有多个key,则会从左向右遍历,哪个列表先弹出就返回哪个
# (4)多个客户端对同一个key执行pop,最先执行命令的客户端会先弹出元素
rpush key 1 2 3 4
blpop key 0
lrange key 0 -1


# A窗口
blpop key 100
# B窗口
rpush key 1 2 3 4
# A窗口立即返回结果


# A窗口
blpop k1 k2 k3 k4 500
# B窗口
lrange k1 0 -1
lrange k2 0 -1
lrange k3 0 -1
lrange k4 0 -1
lpush k1 1 2 3
# A窗口立即返回结果

image.pngimage.png
image.png

2. 内部编码

OBJECT encoding key

image.png
quicklist快速列表,相当于是linkedlistziplist的结合。**quicklist**还是一个链表,不过链表上的每个节点都是一个压缩列表。使用ziplist能够把数据按照更紧凑的压缩形式进行表示,能够节省空间,同时再把多个ziplist通过链式结构连起来又能提升查找效率。那么每个ziplist的大小是多少呢?这个我们能够在配置文件中查看list-max-ziplist-size这个参数。
image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值