php redis刪除key的方法:首先使用scan命令增量迭代的方式遍歷出以【XX】為前綴的key;然后通過unlink函數(shù)刪除指定的key即可。
推薦:《redis教程》
php redis批量刪除key
摘要
使用scan命令增量迭代的方式遍歷出以XX為前綴的key,然后刪除
立即學習“PHP免費學習筆記(深入)”;
簡介
在實際開發(fā)中,一不小心redis教程就會混入一些無用的數(shù)據(jù),比如某位大哥忘記給加上緩存時間,或者因為業(yè)務修改需要將數(shù)據(jù)結構list改為zset,之前的緩存就沒用了,但是過期時間有點長,這時候就需要批量刪除key。如果使用keys命令遍歷出符合條件的keys,會阻塞redis的其他操作,在生產(chǎn)環(huán)境是肯定不行的,于是祭出scan命令大殺器。
代碼
/** ??在redis集群中,scan命令需要指定節(jié)點。還需要注意,要連接主節(jié)點。 **/ $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情況下有可能會返回空數(shù)組,設置成SCAN_RETRY,如果是空數(shù)組的話,將不返回繼續(xù)掃描下去 ????$redis->setOption(Redis::OPT_SCAN,?Redis::SCAN_RETRY); ????$it?=?NULL; ????while?($arr_keys?=?$redis->scan($it,?CacheKeyConfig::CachePre.'*'))?{ ????????if?(is_array($arr_keys))?{ ????????????//推薦使用unlink函數(shù),非阻塞刪除,刪除大key時很好用,但是它需要redis版本>=4.0 ????????????$result?=?$redis->del($arr_keys); ????????????????echo?$result?.?PHP_EOL; ????????} ????} ????echo?"OK!"?.?PHP_EOL; }
? 版權聲明
文章版權歸作者所有,未經(jīng)允許請勿轉載。
THE END
喜歡就支持一下吧
相關推薦