/** * @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; }
/** * Delete key value(s). * * @Post("/server/{serverId}/db/{dbId}/keys/values/delete", * requirements = {"serverId": "\d+", "dbId": "\d+"} * ) * @RequestParam(name="name", requirements=".+") * @RequestParam(name="type", requirements=".+") * @RequestParam(name="value", array=true) * @ParamConverter("key", converter="fos_rest.request_body", class="Eugef\PhpRedExpert\ApiBundle\Model\RedisKey") * @View() * * @param integer $serverId * @param integer $dbId * @param RedisKey $key * @throws HttpException * @return array */ public function deleteKeyValuesAction($serverId, $dbId, RedisKey $key) { $this->initialize($serverId, $dbId); if (!$key->validName()) { throw new HttpException(400, 'Key name is not specified'); } if (!$key->validType()) { throw new HttpException(400, 'Key type is invalid'); } if (!$key->hasValue('delete')) { throw new HttpException(400, 'Key values to be deleted are not specified'); } $result = $this->redis->deleteKeyValues($key); if ($result === false) { throw new HttpException(404, 'Key values are not deleted'); } return array('key' => $this->redis->getKey($key->getName())); }