如何使用phpredis在PHP中删除多个具有相同模式的redis键?

Red*_*ant 5 php redis phpredis

通过使用phpredis,我在分页中保存了一些数据,如下所示:

   review/itemA/1
   review/itemA/2 
Run Code Online (Sandbox Code Playgroud)

其中12是页码。我在文档中读到您可以使用通配符来检索多个键。

$allKeys = $redis->keys('*');   // all keys will match this.
$keyWithUserPrefix = $redis->keys('user*');
Run Code Online (Sandbox Code Playgroud)

但是,当有人发布新评论时,我是否也可以使用通配符删除所有旧密钥?我可以做这样的事情:

$redis->delete('review/itemA/*'); // or  $redis->delete('review/itemA*')
Run Code Online (Sandbox Code Playgroud)

然而它并没有奏效。

Kev*_*inS 5

使用时phpredis,您可以获取前缀(phpredis 自动在各处添加前缀)并以这种方式删除键模式:

<?php
...

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


Ita*_*ber 4

否 - Redis 的DELlete 不接受通配符,您必须明确命名键。请参阅此处了解可能的方向:/sf/answers/1637938781/

  • 绝对是最糟糕的方法之一;) `KEYS` 是一个邪恶的命令,通常你应该避免使用它(除非你勇敢、愚蠢或两者兼而有之) (2认同)