Skip to content

Commit

Permalink
table
Browse files Browse the repository at this point in the history
  • Loading branch information
zhanglei5 committed Dec 4, 2014
1 parent 02d5d26 commit d1065c9
Showing 1 changed file with 70 additions and 2 deletions.
72 changes: 70 additions & 2 deletions doc/13.swoole_table.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# 13. swoole_table

swoole_table是一个基于共享内存和锁实现的超高性能,并发数据结构。用于解决多进程/多线程数据共享和同步加锁问题。 使用swoole_table可以方便的共享数据,而不用担心数据同步问题,不需要用户层加锁,不需要考虑锁的开销。
swoole_table使用行锁,而不是全局锁,仅当2个进程在同一CPU时间,并发读取同一行数据才会进行发生抢锁。

Expand Down Expand Up @@ -66,7 +65,7 @@ $table->column('id', swoole_table::TYPE_INT, 4);
```

## create
**功能描述**:创建内存表。
**功能描述**:创建内存表。
**函数原型**
```php
swoole_table->create()
Expand All @@ -88,3 +87,72 @@ $table->create();
$worker = new swoole_process('child1', false, false);
$worker->start();
```

## set
**功能描述**:设置行的数据,(swoole_table使用key-value的方式来访问数据,个人感觉key类似于db表记录的id,value则是整条记录的所有列的值。)
**函数原型**
```php
swoole_table->set(string $key, array $value)
```

**参数说明**

| 参数 | 说明 |
| -------- | -------- |
| string key | 数据的key,相同的$key对应同一行数据,如果set同一个key,会覆盖上一次的数据 |
| array $value | 必须是一个数组,value中的键名必须与字段定义的$name完全相同 |

**说明**

> swoole_table->set() 可以设置全部字段的值,也可以只修改部分字段
swoole_table->set() 未设置前,该行数据的所有字段均为空
## get
**功能描述**:获取一行数据。
**函数原型**
```php
array swoole_table->get($key);
```

**返回**
* 如果找到则返回array 数组。
* 如果$key不存在,将返回false。

## del

**功能描述**:删除一行数据。
**函数原型**
```php
bool swoole_table->del(string $key)
```

**返回**
* $key对应的数据不存在,将返回false。
* 成功删除返回true

## lock

**功能描述**:锁定整个表。
**函数原型**
```php
swoole_table->lock()
```

**使用场景**:当多个进程同时要操作一个事务性操作时,一定要加锁,将整个表锁定。操作完成后释放锁。
**说明**
* lock() 是互斥锁,所以只能保护lock/unlock中间的代码是安全的。lock/unlock之外的操作是不能保护的。
* set/get/del操作不使用互斥锁,所以lock之后无法阻止其他进程调用这些函数。

**注意**

> lock/unlock必须成对出现,否则会发生死锁,这里务必要小心
lock/unlock之间不应该加入太多操作,避免锁的粒度太大影响程序性能
lock/unlock之间的代码,应当try/catch避免抛出异常导致跳过unlock发生死锁

## unlock

**功能描述**:释放锁。
**函数原型**
```php
swoole_table->unlock()
```

0 comments on commit d1065c9

Please sign in to comment.