initial 2.0.0-a2 commit

This commit is contained in:
jerry
2020-09-29 15:07:43 +08:00
parent 1510e2f0d0
commit f91d24aaaa
59 changed files with 2271 additions and 1475 deletions

129
src/ZM/Store/LightCache.php Normal file
View File

@@ -0,0 +1,129 @@
<?php
namespace ZM\Store;
use Exception;
use Swoole\Table;
class LightCache
{
/** @var Table|null */
private static $kv_table = null;
private static $config = [];
public static function init($config) {
self::$config = $config;
self::$kv_table = new Table($config["size"], $config["hash_conflict_proportion"]);
self::$kv_table->column("value", Table::TYPE_STRING, $config["max_strlen"]);
self::$kv_table->column("expire", Table::TYPE_INT);
self::$kv_table->column("data_type", Table::TYPE_STRING, 12);
return self::$kv_table->create();
}
/**
* @param string $key
* @return null|string
* @throws Exception
*/
public static function get(string $key) {
if (self::$kv_table === null) throw new Exception("not initialized LightCache");
self::checkExpire($key);
$r = self::$kv_table->get($key);
return $r === false ? null : self::parseGet($r);
}
/**
* @param string $key
* @return mixed|null
* @throws Exception
*/
public static function getExpire(string $key) {
if (self::$kv_table === null) throw new Exception("not initialized LightCache");
self::checkExpire($key);
$r = self::$kv_table->get($key, "expire");
return $r === false ? null : $r - time();
}
/**
* @param string $key
* @param string|array|int $value
* @param int $expire
* @return mixed
* @throws Exception
*/
public static function set(string $key, $value, int $expire = -1) {
if (self::$kv_table === null) throw new Exception("not initialized LightCache");
if (is_array($value) || is_int($value)) {
$value = json_encode($value, JSON_UNESCAPED_UNICODE);
if (strlen($value) >= self::$config["max_strlen"]) return false;
$data_type = "json";
} elseif (is_string($value)) {
$data_type = "";
} else {
throw new Exception("Only can set string, array and int");
}
try {
return self::$kv_table->set($key, [
"value" => $value,
"expire" => $expire != -1 ? $expire + time() : -1,
"data_type" => $data_type
]);
} catch (Exception $e) {
return false;
}
}
public static function getMemoryUsage() {
return self::$kv_table->getMemorySize();
}
/**
* @param string $key
* @return bool
* @throws Exception
*/
public static function isset(string $key) {
return self::get($key) !== null;
}
public static function unset(string $key) {
return self::$kv_table->del($key);
}
public static function getAll() {
$r = [];
$del = [];
foreach (self::$kv_table as $k => $v) {
if ($v["expire"] <= time()) {
$del[]=$k;
continue;
}
$r[$k] = self::parseGet($v);
}
foreach($del as $v) {
self::unset($v);
}
return $r;
}
private static function checkExpire($key) {
if (($expire = self::$kv_table->get($key, "expire")) !== -1) {
if ($expire <= time()) {
self::$kv_table->del($key);
}
}
}
private static function parseGet($r) {
switch ($r["data_type"]) {
case "json":
return json_decode($r["value"], true);
case "":
default:
return $r["value"];
}
}
}

View File

@@ -10,7 +10,6 @@ namespace ZM\Store;
use Swoole\Atomic;
use Swoole\Database\PDOPool;
use swoole_atomic;
use ZM\Config\ZMConfig;
class ZMBuf
@@ -18,36 +17,19 @@ class ZMBuf
//读写的缓存数据需要在worker_num = 1下才能正常使用
/** @var mixed[] ZMBuf的data */
private static $cache = [];
//Scheduler计划任务连接实例只可以在单worker_num时使用
static $scheduler = null; //This is stupid warning...
//Swoole SQL连接池多进程下每个进程一个连接池
/** @var PDOPool */
static $sql_pool = null;//保存sql连接池的类
// swoole server操作对象每个进程均分配
/** @var \swoole_websocket_server $server */
static $server;
/** @var array Http请求uri路径根节点 */
public static $req_mapping_node;
/** @var mixed TimeNLP初始化后的对象每个进程均可初始化 */
public static $time_nlp;
/** @var string[] $custom_connection_class */
public static $custom_connection_class = [];//保存自定义的ws connection连接类型的
// Atomic可跨进程读写的原子计数任何地方均可使用
/** @var null|swoole_atomic */
static $info_level = null;//保存log等级的原子计数
/** @var array 事件注解的绑定对 */
public static $events = [];
/** @var Atomic[] */
public static $atomics;
public static $req_mapping = [];
public static $config = [];
public static $context = [];
public static $instance = [];
public static $context_class = [];
public static $server_events = [];
public static $terminal = null;
static function get($name, $default = null) {
return self::$cache[$name] ?? $default;
@@ -90,13 +72,8 @@ class ZMBuf
return in_array($val, self::$cache[$name]);
}
static function config($config_name) {
return self::$config[$config_name] ?? null;
}
public static function resetCache() {
self::$cache = [];
self::$time_nlp = null;
self::$instance = [];
}
@@ -107,6 +84,15 @@ class ZMBuf
foreach (ZMConfig::get("global", "init_atomics") as $k => $v) {
self::$atomics[$k] = new Atomic($v);
}
self::$atomics["show_log_worker"] = new Atomic(999999);
self::$atomics["stop_signal"] = new Atomic(0);
self::$atomics["wait_msg_id"] = new Atomic(0);
}
/**
* @param $name
* @return Atomic|null
*/
public static function atomic($name) {
return self::$atomics[$name] ?? null;
}
}