Home > Database > Redis > How to delete keys in batches in php redis

How to delete keys in batches in php redis

藏色散人
Release: 2020-08-15 11:49:46
Original
5564 people have browsed it

php Redis method to delete keys: First use the scan command to iterate incrementally to traverse the keys prefixed with [XX]; then delete the specified key through the unlink function.

How to delete keys in batches in php redis

Recommended: "redis tutorial"

php redis batch delete key

Summary

Use the scan command to iterate incrementally to traverse the keys prefixed by XX, and then delete them

Introduction

In actual development, some useless data will be mixed into redis accidentally. For example, a certain elder forgets to add cache time, or needs to add cache time due to business modifications. The data structure list is changed to zset, and the previous cache is useless, but the expiration time is a bit long. At this time, the keys need to be deleted in batches. If you use the keys command to traverse the keys that meet the conditions, it will block other operations of redis, which is definitely not possible in a production environment, so the scan command is used as a killer.

Code

/**
  在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;
}
Copy after login

The above is the detailed content of How to delete keys in batches in php redis. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template