/** * @param RedisKey $key * @return boolean */ public function createKey(RedisKey $key) { $result = false; switch ($key->getType()) { case static::$KEY_TYPES[\Redis::REDIS_STRING]: $result = $this->db->setnx($key->getName(), $key->getValue('value', '')); break; case static::$KEY_TYPES[\Redis::REDIS_HASH]: if ($key->hasValue('field')) { $result = $this->db->hsetnx($key->getName(), $key->getValue('field'), $key->getValue('value', '')); } break; case static::$KEY_TYPES[\Redis::REDIS_LIST]: if ($key->hasValue('value')) { switch ($key->getValue('action')) { case 'prepend': $result = $this->db->lpush($key->getName(), $key->getValue('value')); break; case 'append': default: $result = $this->db->rpush($key->getName(), $key->getValue('value')); } } break; case static::$KEY_TYPES[\Redis::REDIS_SET]: $result = $this->db->sadd($key->getName(), $key->getValue('value', '')); break; case static::$KEY_TYPES[\Redis::REDIS_ZSET]: if ($key->hasValue('value')) { $result = $this->db->zadd($key->getName(), (double) $key->getValue('score', 0), $key->getValue('value')); } break; } if ($result) { // Add TTL if key was created if ($key->getTtl() > 0) { $this->db->expire($key->getName(), $key->getTtl()); } } return $result; }