List列表操作

简介:

单键多值

Redis 列表List是简单的字符串列表,按照插入顺序排序。添加元素可以在列表的头部(左边)或者尾部(右边)。

列表List的底层实际上是一个双向链表,对两端的操作性能很高,通过下标索引操作中间的节点性能会较差。

常用命令:

lpush/rpush [key] [value1] [value2] ... 从左边/右边插入一个或者多值
lpop/rpop [key] 返回左边/右边的值 并删除

rpoplpush [key1] [key2] 从key1列表右边取出值,插入key2列表的左边

lrange [key] [st] [ed] 从key对应的List中按照下标索引获取st到ed的元素
            0 -> 头部索引  -1 -> 尾部索引
lindex [key] [index] 按照下标索引index获取key中的元素(左边第一个元素下标为0)
llen [key] 获取List长度

linsert [key] after/before [value] [newvalue] 在value前/后插入newvalue
            如果不成功,没有找到value,返回-1。成功返回List长度
lrem [key] [n] [value] 从key对应List开始,删除掉List中的n个value。
            
lset [key] [index] [value] 将key对应List下标为index的值替换成value

数据结构:

​ List的数据结构为快速列表QuickList

在列表元素较少的情况下,会使用一块连续的内存存储。这个结构式压缩列表ziplist,ziplist将所有元素在内存上连续的存储。

当数据量比较多时,才会改成quicklist。

普通的链表需要的附加指针空间太大,会造成空间资源的浪费。

Redis将链表和ziplist结合起来组成了quicklist。

上一篇
下一篇