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.
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; }
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!