php redis批量删除key的方法


本文摘自PHP中文网,作者藏色散人,侵删。

php redis删除key的方法:首先使用scan命令增量迭代的方式遍历出以【XX】为前缀的key;然后通过unlink函数删除指定的key即可。

推荐:《redis教程

php redis批量删除key

摘要

使用scan命令增量迭代的方式遍历出以XX为前缀的key,然后删除

简介

在实际开发中,一不小心redis就会混入一些无用的数据,比如某位大哥忘记给加上缓存时间,或者因为业务修改需要将数据结构list改为zset,之前的缓存就没用了,但是过期时间有点长,这时候就需要批量删除key。如果使用keys命令遍历出符合条件的keys,会阻塞redis的其他操作,在生产环境是肯定不行的,于是祭出scan命令大杀器。

代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

/**

  在redis集群中,scan命令需要指定节点。还需要注意,要连接主节点。

**/

$redis = new \Redis();

$timeout = 2.5;

$ip = '127.0.0.1';

$redisConfArr = [

    [$ip, 8001],

    [$ip, 8002],

    [$ip, 8003]

];

foreach ($redisConfArr as $redisConf) {

    $redis->pconnect($redisConf[0], $redisConf[1], $timeout);

    //默认SCAN_NORETRY情况下有可能会返回空数组,设置成SCAN_RETRY,如果是空数组的话,将不返回继续扫描下去

    $redis->setOption(\Redis::OPT_SCAN, \Redis::SCAN_RETRY);

    $it = NULL;

    while ($arr_keys = $redis->scan($it, CacheKeyConfig::CachePre.'*')) {

        if (is_array($arr_keys)) {

            //推荐使用unlink函数,非阻塞删除,删除大key时很好用,但是它需要redis版本>=4.0

            $result = $redis->del($arr_keys);

                echo $result . PHP_EOL;

        }

    }

    echo "OK!" . PHP_EOL;

}

以上就是php redis批量删除key的方法的详细内容,更多文章请关注木庄网络博客


打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...