删除与模式 Laravel 5.7 匹配的 Redis 键
Delete Redis Keys matching a pattern Laravel 5.7
我一直在搜索并尝试了多种解决方案,但没有得到任何有用的结果,我想要 clear/delete 所有键匹配模式 products:*
。
以下是我尝试过的方法。
Redis::del('products:*');
Redis::del('*products:*');
Redis::del('*products*');
但没有任何效果。
如果我提供准确的密钥名称,它正在删除密钥:Redis::del('products:2:3:45');
密钥生成如下:products:1:4:45
我已阅读文档,但可以找到与我的查询相关的任何内容。
请帮忙。
不能按模式删除。但是你可以通过这个模式得到所有的键然后删除它们:
Redis::del(Redis::keys('products:*'));
查看更多here.
我们可以使用array_map函数遍历redis中的所有键并进行删除。
$redis = new Redis;
$prefix = $redis->getOption(Redis::OPT_PREFIX);
$redis->delete(array_map(
function ($key) use ($prefix) {
return str_replace($prefix, '', $key);
}, $redis->keys('*'))
);
我在某处读到不能根据通配符删除,需要明确给出密钥。
还有一种方法可以获取所有键,然后 运行 删除这些键。我使用 cli 这样做:
redis-cli KEYS "products:*" | xargs redis-cli DEL
它获取与查询匹配的所有键和 运行 DEL
。
您可以从 Laravel.
执行此命令
在 Laravel 中,获取所有键并使用
运行 删除它们
Redis::del(Redis::keys('products:*'));
使用 Laravel 8 它没有被删除,因为密钥有一个前缀
所以我所做的是在将前缀传递给 del()
之前删除前缀
$keys = Redis::keys( 'products:*' );
if ( !empty( $keys ) ){
$keys = array_map(function ($k){
return str_replace('_prefix_database', '', $k);
}, $keys);
Redis::del( $keys );
}
我希望这对某人有所帮助
与Laravel8我使用:
public function handle()
{
$this->call('queue:flush');
$arrayFailed = Redis::connection('horizon')->keys('failed:*');
$arrayFailedJobs = Redis::connection('horizon')->keys('failed_jobs');
$arrayToRemove = array_merge($arrayFailed, $arrayFailedJobs);
$arrayMap = array_map(function ($k) {
return str_replace(config('horizon.prefix'), '', $k);
}, $arrayToRemove);
Redis::connection('horizon')->del($arrayMap);
$this->line('');
}
我一直在搜索并尝试了多种解决方案,但没有得到任何有用的结果,我想要 clear/delete 所有键匹配模式 products:*
。
以下是我尝试过的方法。
Redis::del('products:*');
Redis::del('*products:*');
Redis::del('*products*');
但没有任何效果。
如果我提供准确的密钥名称,它正在删除密钥:Redis::del('products:2:3:45');
密钥生成如下:products:1:4:45
我已阅读文档,但可以找到与我的查询相关的任何内容。
请帮忙。
不能按模式删除。但是你可以通过这个模式得到所有的键然后删除它们:
Redis::del(Redis::keys('products:*'));
查看更多here.
我们可以使用array_map函数遍历redis中的所有键并进行删除。
$redis = new Redis;
$prefix = $redis->getOption(Redis::OPT_PREFIX);
$redis->delete(array_map(
function ($key) use ($prefix) {
return str_replace($prefix, '', $key);
}, $redis->keys('*'))
);
我在某处读到不能根据通配符删除,需要明确给出密钥。
还有一种方法可以获取所有键,然后 运行 删除这些键。我使用 cli 这样做:
redis-cli KEYS "products:*" | xargs redis-cli DEL
它获取与查询匹配的所有键和 运行 DEL
。
您可以从 Laravel.
在 Laravel 中,获取所有键并使用
运行 删除它们Redis::del(Redis::keys('products:*'));
使用 Laravel 8 它没有被删除,因为密钥有一个前缀 所以我所做的是在将前缀传递给 del()
之前删除前缀$keys = Redis::keys( 'products:*' );
if ( !empty( $keys ) ){
$keys = array_map(function ($k){
return str_replace('_prefix_database', '', $k);
}, $keys);
Redis::del( $keys );
}
我希望这对某人有所帮助
与Laravel8我使用:
public function handle()
{
$this->call('queue:flush');
$arrayFailed = Redis::connection('horizon')->keys('failed:*');
$arrayFailedJobs = Redis::connection('horizon')->keys('failed_jobs');
$arrayToRemove = array_merge($arrayFailed, $arrayFailedJobs);
$arrayMap = array_map(function ($k) {
return str_replace(config('horizon.prefix'), '', $k);
}, $arrayToRemove);
Redis::connection('horizon')->del($arrayMap);
$this->line('');
}