# ZMAtomic 原子计数器
原子计数器是用于多进程间跨进程使用的原子计数使用的,比如统计入站请求数量等。此功能基于 Swoole 的 Atomic,详情见 [Swoole - 文档](进程间无锁计数器(Atomic) (swoole.com) (opens new window))。
# 配置和初始化
见配置文件:config/global.php
中的 init_atomics
字段:
/** zhamao-framework在框架启动时初始化的atomic们 */
$config['init_atomics'] = [
'foo' => 0,
'bar' => 4,
];
1
2
3
4
5
2
3
4
5
这时我们就成功初始化两个原子计数器,名字分别为 foo
和 bar
。
注意
初始化的值必须是不小于 0 的 int32 值!
# 使用
定义和命名空间:ZM\Store\ZMAtomic
连接计数示例:
<?php
namespace Module\Example;
use ZM\Annotation\Swoole\OnRequestEvent;
use ZM\Store\ZMAtomic;
class Hello {
/**
* @OnRequestEvent()
*/
public function onRequest() {
$cnt = ZMAtomic::get("foo")->add(1);
ctx()->getResponse()->end("当前已访问:".$cnt."次");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# ZMAtomic::get()->get()
获取计数的数字:dump(ZMAtomic::get("bar")->get());
返回 4。
# ZMAtomic::get()->add($num)
加上一定的数并返回结果:dump(ZMAtomic::get("bar")->add(5));
返回 9。
# ZMAtomic::get()->sub($num)
要减少的数值(必须为正整数):dump(ZMAtomic::get("bar")->sub(5));
返回 5。
# ZMAtomic::get()->set($num)
设置计数的数字:ZMAtomic::get("bar")->set(77);
提示
还有一些不常用的方法,可以看 Swoole 官方的文档,这里就不一一列举了。