不负责任地猜测,应该跟 nginx 主要用 rbtree 来管理 key/value 相关,然后春哥在实现的时候也把这个思路带到了 shdict 上(毕竟需要用到 nginx 自身的数据结构,ngx_rbtree_t 什么的)。
nginx 也有 ngx_hash_t ,但只是用在管理 HTTP 报头上,功能也是精简过的。
当然,如果你有空的话,可以利用 OpenResty 的 C API,写一个基于 hash 的实现看看。
参考这里的 ngx_http_lua_fake_shm_module 实现:
https://github.com/openresty/lua-nginx-module/pull/899/files
在 2016年12月16日星期五 UTC+8下午2:24:43,fish写道:
正常情况下,hash的插入删除和查找性能都比红黑树要高很多。
当然红黑树是有序的,如果需要范围查找选用它也没错。如果仅仅是key value结构,我觉得hash表更合适。