php复述,如何批量删除钥匙

  介绍

这篇文章主要介绍php复述,如何批量删除钥匙,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

php复述,批量删除键的方法:首先打开命令窗口,然后通过命令“redis-cli键视频* | xargs redis-cli del”实现批量删除关键即可。

<强>复述,实现批量删除关键功能

键在测试环境使用复述的时候,经常会要批量删除键,我们但是复述,并没有提供批量删除的命令,但是我们可以在命令行下,使用键遍历键实现

//批量删除以开视频头的关键   redis-cli键视频* | xargs redis-cli德尔//以j r开头,紧跟edi字符串的所有键   redis-cli键[j r] edi | xargs redis-cli del 注意:   复述是单线程架构,如果复述,包含了大量的键,执行键命令可能会造成复述,阻塞,所以一般建议不要在生产环境下使用钥匙命令。   如果非要遍历键删除的话,可以在一下三种情况使用:   (1)在一个不对外提供服务的复述,从节点上执行,这样不会阻塞到客户端的请求,但是会影响到主从复制。   (2)如果确认键值总数确实比较少,可以执行该命令。   (3)使用扫描命令渐进式的遍历所有键,可以有效防止阻塞。

渐进式遍历

<编辑>扫描命令文档

复述,提供了面向哈希类型,集合类型,有序集合的扫描遍历命令,解决诸如hgetall, smembers, zrange可能产生的阻塞问题,对应的命令分别是hscan, sscan, zscan,它们的用法和扫描基本类似。

注意:
渐进式遍历可以有效的解决键命令可能产生的阻塞问题,但是扫描并非完美无瑕,如果在扫描的过程中如果有键的变化(增加,删除,修改),
那么遍历效果可能会碰到如下问题:新增的键可能没有遍历到,遍历出了重复的键等情况,也就是说扫描并不能保证完整的遍历出来所有的键,这些是我们在开发时需要考虑的。

& lt; php ?      名称空间复述;         使用复述;      类RedisTest   {   const端口=6379;/* *   *复述对象   */公共复述,美元=零;      公共函数__construct ()   {   $ this→新复述,复述,=();   $ this→复述→连接(& # 39;127.0.0.1 # 39;,self::端口);   }      公共信息()函数   {   print_r ($ this→复述→信息());   }/* *   *删除前缀是测试:的关键   */公共函数keyDelete ()   {   以前美元=& # 39;测试:& # 39;;      ($ i=0;美元我& lt;10;$我+ +){   $ this→复述→设置($前。“我美元,“我美元);   }//扫描重试   $ this→复述→setOption(复述::OPT_SCAN,复述,::SCAN_RETRY);      美元=零;   虽然(arr_keys=美元这个→复述→扫描(美元,美元“pre *“, 5)) {   中的call_user_func_array ([$ this→复述,& # 39;德尔# 39;],arr_keys美元);      回声var_export (arr_keys美元,真的)。PHP_EOL;   }   }   }

返回结果

阵列(
  0=比;& # 39;测试:8 & # 39;
  )
  阵列(
  0=比;& # 39;测试:1 & # 39;
  )
  阵列(
  0=比;& # 39;测试:9 & # 39;
  )
  阵列(
  0=比;& # 39;测试:6 & # 39;
  )
  阵列(
  0=比;& # 39;测试:5 & # 39;
  )
  阵列(
  0=比;& # 39;测试:0 & # 39;
  )
  阵列(
  0=比;& # 39;测试:3 & # 39;
  )
  阵列(
  0=比;& # 39;测试:7 & # 39;
  )
  阵列(
  0=比;& # 39;测试:4 & # 39;
  )
  阵列(
  0=比;& # 39;测试:2 & # 39;
  )

SSCAN HSCAN, ZSCAN,扫描命令的坑

//扫描重试   $ this→复述→setOption(复述::OPT_SCAN,复述,::SCAN_RETRY);      美元=零;   虽然(arr_keys=美元这个→复述→扫描(美元,美元“pre *“, 5)) {   中的call_user_func_array ([$ this→复述,& # 39;德尔# 39;],arr_keys美元);      回声var_export (arr_keys美元,真的)。PHP_EOL;   }

根据扫描的文档说明可知:扫描命令每次迭代的时候,有可能返回空,但这并不是结束的标志,而是当返回的迭代的值为“0”时才算结束。

因此,上面的代码在迭代的时候,若没有arr_keys返回,arr_keys美元是个空数组,所以,循环自然就中断了,所以没有任何输出。

为了避免arr_keys返回是个空数组的问题我们可以这样解决:

<编辑>解决方法一 $ this→复述→setOption(复述::OPT_SCAN,复述,::SCAN_RETRY);

php复述,如何批量删除钥匙