🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# Table->\_\_construct [TOC] 创建内存表。 ~~~ function Table->__construct(int $size, float $conflict_proportion = 0.2) ~~~ * `$size`参数指定表格的最大行数,如果`$size`不是为`2`的N次方,如`1024`、`8192`,`65536`等,底层会自动调整为接近的一个数字,如果小于1024则默认成1024,即1024是最小值 * `table`占用的内存总数为 (结构体长度 + KEY长度64字节 + 行尺寸`$size`) \* (1.2预留20%作为hash冲突) \* (列尺寸),如果机器内存不足table会创建失败 * `set`操作能存储的最大行数与`$size`正相关,但不完全一致,如`$size`为1024实际可存储的行数小于`1024` > `Table`基于行锁,所以单次`set/get/del`在多线程/多进程的环境下是安全的 > `set/get/del`等方法是原子操作,用户代码中不需要担心数据加锁和同步的问题 ## 容量计算 `Table`底层是建立在共享内存之上的`HashTable`数据结构。`$size`最大行数,决定了`HashTable`的总行数。由于`Table`是在共享内存之上,所以无法动态扩容。这个`$size`必须在创建前设置好。 `Table`能存储的总数据行数,取决于数据的`Key`冲突率。如果冲突率超过`20%`,预留的`hash`冲突内存块容量不足,就会报`Unable to allocate memory`错误,并返回`false`,存储失败。