简介
Redis中的列表是简单的字符串列表,你可以添加一个元素到列表的头部(左边)或者尾部(右边),可以用它来做微博时间轴列表,还可以充当队列
常用命令
从左边/右边插入一个或多个值
#从左边插入 lpush <key1> <value1> <value2> ...... #从右边插入 rpush <key1> <value1> <value2> ......
- 从左边/右边吐出一个值,取出一个值就删除这个值,值在键在,值亡键亡。
#从左边吐出 lpop <key1> #从右边吐出 rpop <key1>
从上述示例中可以看出,从左边插入左边吐出的话,那就是先进后出的形式,从左边插入右边吐出的话那就是先进先出的形式。
从<key1>
列表右边吐出一个值,插到<key2>
列表左边
rpoplpush <key1> <key2>
按照索引下标获得元素(从左到右), 其中<start>
为0时指左边第一个, <stop>
为-1时指右边第一个,(0~-1 表示获取所有)
lrange <key> <start> <stop>
按照索引下标获得元素(从左到右)
lindex <key> <index>
获得列表长度
llen <key>
在<value>
的前面|后面插入<newvalue>
插入值
#在`<value>` 的前面插入`<newvalue>` 插入值 linsert <key> before <value> <newvalue> #`<value>` 的后面插入`<newvalue>` 插入值 linsert <key> after <value> <newvalue>
从<value>
的左边删除n个<value>
(从左到右)
lrem <key1> <n> <value>
将列表<key>
下标为<index>
的值替换成<value>
lset <key> <index> <value>
数据结构
List的数据结构为快速链表 quickList。
在列表元素较少的情况下使用一块连续的内存存储,这个结构是ziplist,也就是压缩列表。
它将所有的元素紧挨着一起存储,分配的是一块连续的内存。
当数据量较多的时候才会改成 quickList。
因为普通的链表需要的附加指针空间太大, 会比较浪费空间,比如这个列表中存的只是int类型数据,结构上海需要两个额外的指针prev和next。
Redis 将链表和ziplist结合起来组成了quicklist。也就是将多个ziplist 使用双向指针串起来使用。这样既满足了快速的插入删除性能,又不会出现太大的空间冗余。
详情可以了解这篇文章Redis(七)-Redis的list列表的数据结构-快速链表
参考
《Redis的设计与实现》