首頁  >  文章  >  資料庫  >  php redis批量刪除key的方法

php redis批量刪除key的方法

藏色散人
藏色散人原創
2020-08-15 10:33:285540瀏覽

php redis刪除key的方法:先使用scan指令增量迭代的方式遍歷出以【XX】為前綴的key;然後透過unlink函數刪除指定的key即可。

php redis批量刪除key的方法

推薦:《redis教學

php redis批次刪除key

摘要

使用scan指令增量迭代的方式遍歷出以XX為前綴的key,然後刪除

簡介

在實際開發中,一不小心redis就會混入一些無用的資料,例如某位大哥忘記給加上快取時間,或者因為業務修改需要將資料結構list改為zset,之前的快取就沒用了,但是過期時間有點長,這時候就需要批次刪除key。如果使用keys指令遍歷出符合條件的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批量刪除key的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn