Table->__construct
最后更新于:2022-04-02 06:31:46
# 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`,存储失败。
';