1,介绍
单键多值
redis列表是简单的字符串列表,按照插入顺序排序,你可以添加一个元素到表的头部或尾部
双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差
2,常用命令
lpush/rpush <key> <value> <value1> <value2> ... 从左边/右边插入一个或多个值
lpop/rpop <key> 从左边/右边弹出一个值,值在健在,值亡键亡
rpoplpush <key1> <key2> 从key1列表右边吐出一个值,插入到key2的左边
lrange <key> <start> <stop> 按照索引下标获取元素 (从左到右)(-1代表右边第一个)
lindex <key> <index> 按照索引下标获取元素(从左到右)
llen <key> 获取列表长度
linsert <key> before/after <value> <newvalue> 在value前插入newvalue这个值
lrem <key> <n> <value> 从左边删除n个value
lset <key> <index> <value> 将列表 key 下标为 index 的值替换成 value
3,数据结构
List的数据结构是快速链表quickList
首先在列表元素较少的情况下,会使用一块连续的内存储存,这个结构是zipList,即也是压缩列表
它将所有的元素紧挨着储存,分配的是一块连续的内存
当数据量较大时才会改成quickList (多个zipList连起来)
因为普通的链表需要的附加指针空间较大,会比较浪费空间,
比如,列表内只存int数据,但还是需要额外的prev和next指针
Redis 链表和zipList结合起来组成quickList,也就是将多个zipList使用双向指针串联起来使用。
这样既满足了快速的插入删除性能,又不会出现太大的冗余空间。