redis 底层做了些什么之List

484 阅读2分钟

系列文章:

redis 底层做了些什么之简单动态字符串SDS

redis 底层做了些什么之List

redis 底层做了些什么之Hash

Redis 的值是列表(List)类型的时候,它的底层实现是一个链表,你可以添加一个元素到列表的左边或者右边

Redis链表节点的实现:

是双向节点,多个节点可以通过prev和next指针构成双端链表.

Redis链表结构:

虽然多个节点本身就可以构成链表,但是Redis采用了某种list结构来持有链表,操作起来会更加方便:

一个list结构和三个节点构成的链表:

head指针指向链表的头节点

tail指针指向链表的尾节点

len记录链表的节点数量

Redis 中List的常用操作

LPUSH

将1个或多个值插入到链表的头部,因为是插入到头部,所以后插入的数据会在前面

语法:

LPUSH key value [value ...]

RPUSH

将1个或多个值插入到链表的尾部,后插入的值在后面

语法:

RPUSH key value [value ...]

LRANGE

查看某个key对应的List的值(注意这个key的value值必须是List类型,否则就会报 WRONGTYPE Operation against a key holding the wrong kind of value),必须设置查看的索引范围,Redis 中List结构的索引从0开始

语法:

LRANGE key start stop

LPOP

移除链表的头节点

语法:

LPOP key

RPOP

移除链表的尾节点

语法:

RPOP key

LINDEX

按照索引获取链表某个节点的值

语法:

LINDEX key index

LLEN

获取某个链表的长度

语法:

LLEN key

LTRIM

将一个链表按照索引,得到其中的一部分,并赋值给自己

语法:

LTRIM key start stop

LSET

设置链表中某个索引的值

语法:

LSET key index value

SORT

按照条件 排序返回链表的结果 语序:

SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC]