Redis' lists

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)
  • 无环
  • 多态,方便存储各种类型的值

你可能感兴趣的:(Redis' lists)