- 6个容器: 数组,链表, 队列, hash表, 红黑树, 基数树
哈希表
- 应用场景: nginx 哈希表通常只会静态不变的内容,在运行过程中不会出现插入和删除, nginx 启动时就确定元素个数;(bucket_size; max_size)
- 使用的模块: variables(stream/http); map(stream/http); 反向代理; http module; http core;
- bucket_size 对齐问题: 以 cpu_cache 向上取整;减少访问 hash 表(主存/内存)的次数; 例如 分配53 会向上取整到64;
红黑树
- 二叉树
- 查找树二叉树:左边节点比右边节点小;
- 高度差不会超过两倍log(n);
- 增删改查算法复杂度 O(long(n));
- 遍历复杂度 O(n);
- 使用红黑树的模块: ngx_conf_module; ngx_http_limit_conn_module; ngx_http_limit_req_module; ngx_http_lua_shdict:ngx.shared.DICT(lru链表性质); ngx_http_file_cache;ngx_http_geo_module;ngx_stream_geo_module;等