diff --git a/src/ZM/Event/ServerEventHandler.php b/src/ZM/Event/ServerEventHandler.php index 1b962f2d..9df85e5b 100644 --- a/src/ZM/Event/ServerEventHandler.php +++ b/src/ZM/Event/ServerEventHandler.php @@ -501,6 +501,11 @@ class ServerEventHandler $action = ["action" => "returnWorkerCache", "cid" => $data["cid"], "value" => $r]; $server->sendMessage(json_encode($action, 256), $src_worker_id); break; + case "unsetWorkerCache": + $r = WorkerCache::unset($data["key"]); + $action = ["action" => "returnWorkerCache", "cid" => $data["cid"], "value" => $r]; + $server->sendMessage(json_encode($action, 256), $src_worker_id); + break; case "asyncAddWorkerCache": WorkerCache::add($data["key"], $data["value"], true); break; @@ -510,6 +515,9 @@ class ServerEventHandler case "asyncSetWorkerCache": WorkerCache::set($data["key"], $data["value"], true); break; + case "asyncUnsetWorkerCache": + WorkerCache::unset($data["key"], true); + break; case "addWorkerCache": $r = WorkerCache::add($data["key"], $data["value"]); $action = ["action" => "returnWorkerCache", "cid" => $data["cid"], "value" => $r]; diff --git a/src/ZM/Store/WorkerCache.php b/src/ZM/Store/WorkerCache.php index e1d15cdb..4655c21a 100644 --- a/src/ZM/Store/WorkerCache.php +++ b/src/ZM/Store/WorkerCache.php @@ -45,6 +45,23 @@ class WorkerCache } } + public static function unset($key, $async = false) { + $config = self::$config ?? ZMConfig::get("global", "worker_cache"); + if ($config["worker"] === server()->worker_id) { + unset(self::$store[$key]); + return true; + } else { + $action = ["action" => $async ? "asyncUnsetWorkerCache" : "unsetWorkerCache", "key" => $key, "cid" => zm_cid()]; + $ss = server()->sendMessage(json_encode($action, JSON_UNESCAPED_UNICODE), $config["worker"]); + if(!$ss) return false; + if ($async) return true; + zm_yield(); + $p = self::$transfer[zm_cid()] ?? null; + unset(self::$transfer[zm_cid()]); + return $p; + } + } + public static function add($key, int $value, $async = false) { $config = self::$config ?? ZMConfig::get("global", "worker_cache"); if ($config["worker"] === server()->worker_id) {