Redis数据类型之链表
来源:互联网 发布:cms监控软件怎么连手机 编辑:程序博客网 时间:2024/06/07 19:29
Redis数据类型之链表
链表的实现
redis的列表的底层实现就是一个双链表,源码在src下的adlist.h和adlist.c
链表的结点数据结构
/* * 双端链表节点 */ typedef struct listNode { // 前置节点 struct listNode *prev; // 后置节点 struct listNode *next; // 节点的值 void *value; } listNode;
链表数据结构
/* * 双端链表结构 */typedef struct list { // 表头节点 listNode *head; // 表尾节点 listNode *tail; // 节点值复制函数 void *(*dup)(void *ptr); // 节点值释放函数 void (*free)(void *ptr); // 节点值对比函数 int (*match)(void *ptr, void *key); // 链表所包含的节点数量 unsigned long len;} list;
链表的redis的具体功能
- 列表键
- 发布与订阅
- 慢查询
- 监视器
部分函数的时间复杂度
// 返回给定链表所包含的节点数量// T = O(1)#define listLength(l) ((l)->len)// 返回给定链表的表头节点// T = O(1)#define listFirst(l) ((l)->head)// 返回给定链表的表尾节点// T = O(1)#define listLast(l) ((l)->tail)// 返回给定节点的前置节点// T = O(1)#define listPrevNode(n) ((n)->prev)// 返回给定节点的后置节点// T = O(1)#define listNextNode(n) ((n)->next)// 返回给定节点的值// T = O(1)#define listNodeValue(n) ((n)->value)// 将链表 l 的值复制函数设置为 m// T = O(1)#define listSetDupMethod(l,m) ((l)->dup = (m))// 将链表 l 的值释放函数设置为 m// T = O(1)#define listSetFreeMethod(l,m) ((l)->free = (m))// 将链表的对比函数设置为 m// T = O(1)#define listSetMatchMethod(l,m) ((l)->match = (m))// 返回给定链表的值复制函数// T = O(1)#define listGetDupMethod(l) ((l)->dup)// 返回给定链表的值释放函数// T = O(1)#define listGetFree(l) ((l)->free)// 返回给定链表的值对比函数// T = O(1)#define listGetMatchMethod(l) ((l)->match)
/* * 创建一个新的链表 * * 创建成功返回链表,失败返回 NULL 。 * * T = O(1) */list *listCreate(void){ struct list *list; // 分配内存 if ((list = zmalloc(sizeof(*list))) == NULL) return NULL; // 初始化属性 list->head = list->tail = NULL; list->len = 0; list->dup = NULL; list->free = NULL; list->match = NULL; return list;}
注意,这里的分配 malloc函数,是自己实现的zmalloc
0 0
- Redis数据类型之链表
- redis之 Redis常用数据类型
- Redis数据类型之string
- redis数据类型之list
- redis数据类型之hash
- redis数据类型之set
- Redis数据类型之字符串
- Redis数据类型之字典
- redis之数据类型
- redis数据类型之hash
- redis数据类型之列表
- NoSql之Redis数据类型
- Redis 入门之 数据类型
- Redis学习之数据类型
- Redis数据类型之String
- Redis数据类型之List
- Redis数据类型之Hash
- Redis数据类型之Set
- Spring JDBCTemplate Query步骤查询
- Scala学习第四天:For与Function进阶实战、Lazy的使用
- 【0-1背包】HDU-2602 Bone Collection
- 《写给大忙人看的java SE8》笔记 -- 2. Stream
- JSP学习--常用作用域
- Redis数据类型之链表
- 设计模式-单例模式
- 动态链接库(DLL)编程深入浅出
- 微信与财付通接口签名调试总结
- Stockbroker Grapevine (POJ 1125)
- OKHttp源码解析(三)
- Poj 1064 && Hdu 1551 Cable master【二分搜索】
- [leetcode-66]plus one(java)
- 写给编程语言,虚拟机,优化以及未来之路