2014-08-27 33 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 2014-08-27 17:09:01

+0

感謝@nmallare我剛剛糾正了第二個阻止 – fdellutri 2014-08-27 17:21:13

+0

嘗試在'''而不是'''包裝你的密鑰 – nmallare 2014-08-28 22:03:52

回答

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('*')) 
);