删除与模式 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('');
    }