Redis列表基本操作命令
命令 | 行为 |
---|---|
LPUSH | 将值设在列表头部 |
RPUSH | 将值设在列表尾部 |
LPOP | 将列表头部值推出 |
RPOP | 将列表尾部值推出 |
LRANGE | 获取列表在给定范围上的所有元素 |
LINDEX | 获取列表在给定位置上的单个元素 |
Redis list底层结构
Redis list由链表来实现。在Redis中链表的应用非常广泛,包括但不限于:链表键、发布/订阅、慢查询、监视器等。Redis服务器本身还使用链表来保存多个客户端的状态信息、以及使用链表来构建客户端输出缓冲区。
链表节点的结构体表示为:
typedef struct listNode { struct listNode *prev; struct listNode *next; void *value; } listNode;
很明显,listNode可以构造出双向链表。
通过list来封装listNode,可以使得操作更加方便:
typedef struct list { listNode *head; listNode *tail; unsigned long len; // 链表包含的节点数量 void *(*dup)(void *ptr); // 节点值复制函数 void *(*free)(void *ptr); // 节点值释放函数 int (*match)(void *ptr, void *key); // 节点值对比函数 } list;
Redis链表的优势
- 获取某个节点的前置节点和后置节点的复杂度都是O(1)
- 获取头节点和尾节点的复杂度都是O(1)
- 无环
- 多态,方便存储各种类型的值