2014-08-27 6 views
2

мне нужно удалить ключ, содержащий некоторые специальные клавиши (в моем случае квадратные скобки):PHP Predis: как получить/удалить ключи, содержащие специальные символы?

я делаю следующее, но он не работает:

$this->redis;  
$keys = $this->redis->keys("*"); 
foreach ($keys as $key) { 

    // keys are in the following format: 
    // vir3_data_cache[zones_cdc_shifting_series_2013_5][1] 

    $this->redis->del($key); 
    // no key was deleted 
} 

Я также попытался процитировать ключ, но без успеха:

$this->redis;  
$keys = $this->redis->keys("*"); 
foreach ($keys as $key) { 

    // keys are in the following format: 
    // vir3_data_cache[zones_cdc_shifting_series_2013_5][1] 

    $quotedKey = addslashes(addslashes($key)); 
    $this->redis->del($quotedKey); 
    // no key was deleted 
} 
+0

Я не вижу в них ничего другого. – nmallare

+0

thanks @nmallare Я только что скорректировал второй блок – fdellutri

+0

Попробуйте обернуть ваш ключ в '' 'вместо' ''. – nmallare

ответ

2

решаемые. Проблема была связана с тем, что predis автоматически вставляет автоматически настроенный префикс в начале каждого ключа (в моем случае «vir3_data_cache») перед выполнением любой операции. Но команда keys("*") не снимает префикс с ключа.

Так что мне нужно сделать следующее, чтобы сделать мой код работы:

$prefix = $this->redis->getOptions()->__get('prefix')->getPrefix(); 

$keys = $this->redis->keys("*"); 
$removed = 0; 
foreach ($keys as $key) { 
    if (substr($key, 0, strlen($prefix)) == $prefix) { 
     $key = substr($key, strlen($prefix)); 
    }    
} 
0

При использовании phpredis, вы можете получить префикс и удалить шаблон ключей таким образом:

<?php 
... 

$prefix = $redisClient->getOption(Redis::OPT_PREFIX); 
$redisClient->delete(array_map(
    function ($key) use ($prefix) { 
     return str_replace($prefix, '', $key); 
    }, $redisClient->keys('*')) 
); 
Смежные вопросы