Redis之列表类型

底层结构

list 是一个有序的数据结构, 长度不固定,所以数组不行
 

(1)ziplist(压缩列表)【紧凑】:当列表的元素个数小于list-max-ziplist-entries配置(默认512个),同时列表中每个元素的值都小于list-max-ziplist-value配置时默认64字节),Redis会选用ziplist来作为列表的内部实现来减少内存的使用。

(2)quicklist(双端链表):当列表类型无法满足ziplist的条件时,Redis会使用quicklist作为列表的内部实现。     

 

ziplist(压缩列表)

zlbytes:  32bit,表示ziplist占用字节的总数
zltail:   32bit,表示ziplist表中最后一项(entry)在ziplist中的偏移字节数,通过zltail可以很方便地找到最后一项,从而可以在ziplist尾端快速地执行push或pop操作
zlen:   16bit,表示ziplist中数据项(entry)的个数
prerawlen:前一个entry的数据长度
len:   entry中的数据长度
data:  真实数据的存储

优点:

    (1)紧凑型,极大地节省内存空间

 缺点:

   (1)通过时间换取空间,操作更加复杂

quicklist

数据实际节点还是存储在ziplist中 

配置ziplist大小

list-max-ziplist-size -2       // 设置ziplist大小

由于list一般用于存储热点数据,所以中间数据很少关心,所以可以对中间数据进行压缩设置

list-compress-depth  1  // 默认为0,不压缩,如果是1,从左边第一个,右边第一个开始中间的压缩

双向链表的缺点:

   由于需要有前后指针,所以,指针会浪费内存。ziplist不使用指针

应用场景

 

好友列表,粉丝列表,消息队列,最新消息排行等。

 

list操作命令【有序,可重复,双端队列】

1.lpush: 往list最左边添加元素

2.rpush:往list最右边添加元素

3.lpop:推出最左边的元素

4.rpop:推出最右边元素

5.llen:查看list长度

6.linsert key before value newValue: 在list指定的值前插入newValue

7.linsert key after value newValue: 在list指定的值后插入newValue

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值