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
}
答
解决。这个问题与事实有关,在进行任何操作之前,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('*'))
);
我没有看到这些不同。 – nmallare 2014-08-27 17:09:01
感谢@nmallare我刚刚纠正了第二个阻止 – fdellutri 2014-08-27 17:21:13
尝试在'''而不是'''包装你的密钥 – nmallare 2014-08-28 22:03:52