• 我知道点redis-数据结构与对象(链表)


    我知道点redis-数据结构与对象(链表)

    使用

    1. 链表键
    2. 发布与订阅
    3. 慢查询
    4. 监视器
    5. 保存多个客户端的状态信息
    6. 构建客户端输出缓冲区

    3.1 链表和链表节点得儿实现

    //链表节点
    typedef struct listNode {
    	
    	//前置节点
    	struct listNode *prev;
    	
    	//后置节点
    	struct listNode *next;
    	
    	//节点的值
    	void *value;
    }listNode;
    

    虽然仅仅使用多个listNode结构就可以组成链表,但使用adlist.h/list来持有链表的话,操作会更方便:

    //链表
    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的链表实现的特性可以总结如下:

    • 双端:带有prev和next指针,获取前置节点后置节点的复杂度为O(1);
    • 无环:表头节点的prev指针和表尾节点的next都指向null,对链表的访问以null为终点;
    • 带表头指针和表位指针:程序获取链表的表头节点和表尾节点的复杂度为O(1)
    • 带链表长度计数器:程序获取链表中节点数量的复杂度为O(1);
    • 多态:链表以void*指针来保存节点值,可以通过dupfreematch三个属性为节点值设置类型特定函数;
  • 相关阅读:
    webpack
    npm
    关于js click事件、touch事件的 screen 、client
    同源策略、jsonp、阻塞事件
    关于height、width、top
    新建空白图片
    配置环境
    异常02
    异常01
    集合框架08
  • 原文地址:https://www.cnblogs.com/wangxin201492/p/4705839.html
Copyright © 2020-2023  润新知