ホームページ  >  記事  >  データベース  >  PHP Redisでキーをバッチで削除する方法

PHP Redisでキーをバッチで削除する方法

藏色散人
藏色散人オリジナル
2020-08-15 10:33:285484ブラウズ

php キーを削除する Redis メソッド: まず、scan コマンドを使用して、[XX] というプレフィックスが付いたキーを段階的に反復処理し、次に unlink 関数を通じて指定されたキーを削除します。

PHP Redisでキーをバッチで削除する方法

# 推奨: 「

redis チュートリアル

php redis バッチ削除キー

概要

scan コマンドを使用して段階的に繰り返し、プレフィックス XX が付いたキーを走査し、削除します。

はじめに

実際の開発では、ある長老がキャッシュ時間を追加するのを忘れたり、キャッシュ時間を追加する必要があるなど、誤って

redis に無駄なデータが混入することがあります。業務変更により、データ構造リストがzsetに変更され、以前のキャッシュは役に立ちませんが、有効期限が少し長いため、この際、キーを一括で削除する必要があります。条件を満たすキーをたどるためにkeysコマンドを使用すると、redisの他の操作がブロックされてしまいますが、本番環境では絶対に不可能であるため、scanコマンドがキラーとして使用されます。

コード

/**
  在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でキーをバッチで削除する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。