예제 #1
0
 /**
  * @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;
 }