1
0
Fork 0
mirror of https://github.com/archtechx/tenancy.git synced 2025-12-13 18:44:03 +00:00

Redis pipeline

This commit is contained in:
Samuel Štancl 2019-09-11 18:30:35 +02:00
parent 1bfe4a7ea5
commit bf48764507

View file

@ -46,6 +46,7 @@ class RedisStorageDriver implements StorageDriver
public function find(string $id): Tenant public function find(string $id): Tenant
{ {
// todo https://redis.io/commands/hgetall
if (! $fields) { if (! $fields) {
return $this->redis->hgetall("tenants:$id"); return $this->redis->hgetall("tenants:$id");
} }
@ -61,21 +62,23 @@ class RedisStorageDriver implements StorageDriver
/** @todo make this atomic */ /** @todo make this atomic */
public function createTenant(Tenant $tenant): void public function createTenant(Tenant $tenant): void
{ {
$id = $tenant->id; $this->redis->pipeline(function ($pipe) use ($tenant) {
$id = $tenant->id;
foreach ($tenant->domains as $domain) { foreach ($tenant->domains as $domain) {
$this->redis->hmset("domains:$domain", 'tenant_id', $id); $pipe->hmset("domains:$domain", 'tenant_id', $id);
} }
$this->redis->hmset("tenants:$id", 'id', json_encode($id), 'domain', json_encode($domain)); $pipe->hmset("tenants:$id", 'id', json_encode($id), 'domain', json_encode($domain));
});
} }
public function updateTenant(Tenant $tenant): void public function updateTenant(Tenant $tenant): void
{ {
$this->redis->pipeline(function ($pipe) use ($tenant) { $this->redis->pipeline(function ($pipe) use ($tenant) {
$this->redis->hmset("tenants:{$tenant->id}", $tenant->data); $pipe->hmset("tenants:{$tenant->id}", $tenant->data);
foreach ($tenant->domains as $domain) { foreach ($tenant->domains as $domain) {
$this->redis->hmset("domains:$domain", 'tenant_id', $tenant->id); $pipe->hmset("domains:$domain", 'tenant_id', $tenant->id);
} }
// todo deleted domains // todo deleted domains