PHP Predis:如何获取/删除包含特殊字符的键?

问题描述:

我需要删除含有一些特殊键的键(在我的情况方括号中):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

解决。这个问题与事实有关,在进行任何操作之前,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)); 
    }    
} 

使用phpredis,你可以得到的前缀和删除键的模式那样:

<?php 
... 

$prefix = $redisClient->getOption(Redis::OPT_PREFIX); 
$redisClient->delete(array_map(
    function ($key) use ($prefix) { 
     return str_replace($prefix, '', $key); 
    }, $redisClient->keys('*')) 
);