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)
  • 无环
  • 多态,方便存储各种类型的值
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • tips:本文参照《redis设计与实现》、《数据结构与算法》、redis源码 链表提供了高效的节点重排能力,以及...
    TOUCH_d36e阅读 3,142评论 0 0
  • 本文为笔者对在学习Redis过程中所收集资料的一个总结,目的是为了以后方便回顾相关的知识,大部分为非原创内容。特此...
    EakonZhao阅读 14,872评论 0 9
  • NOSQL类型简介键值对:会使用到一个哈希表,表中有一个特定的键和一个指针指向特定的数据,如redis,volde...
    MicoCube阅读 9,481评论 2 27
  • 早上看朋友圈,又是到处的新年签,每年好像都有这东西,但每年大家测了自己分享到朋友圈之后,除了当时的唏嘘不已,也便再...
    ronomy阅读 1,469评论 0 0
  • 二分查找 O(log2*n) 有序的元素列表 选择排序 O(n^2) 快速排序 广度优先查找 迪克斯特拉算法 K邻...
    苏鑫的博客阅读 3,757评论 0 0