php redis的scan用法实例分析

在本篇文章了小编给大家整理了一篇关于php redis的scan用法实例分析内容,有兴趣的朋友们可以跟着学习下。

在删除缓存的时候,我们在一些场景下需要批量删除,但不确定具体的key值,可通过匹配的方式进行查询后删除。

但是使用keys会导致redis服务器宕机,慎用。。。

一般公司也会禁用keys等比较敏感的命令的。

所以工作中会使用scan命令来进行匹配查询

SCAN cursor [MATCH pattern] [COUNT count]

比如:

# 从游标 0 开始扫描 匹配 test1:* 的键值,一次扫描1000条

scan 0 match test1:* count 1000

# 从游标 0 开始扫描 匹配 test1:* 的键值,一次扫描1000条

scan 0 match test1:* count 1000

php redis的scan用法实例分析

1) 表示下一次扫描的游标值 ,命令行显示的是字符串类型的。

2)表示本次扫描匹配到的键值列表

用php代码怎么实现呢,举个例子

  1. function getKeysByPattern($pattern)
  2. {
  3. $keysList = [];
  4. while(true){
  5. //@todo 这里的client替换为自己的redis客户端对象
  6. $keys = $client->scan($iterator, $pattern,1000);
  7. $keysList = array_merge($keysList, $keys??[]);
  8. if ($iterator === 0) {//迭代结束,未找到匹配pattern的key
  9. break;
  10. }
  11. if ($iterator === null) {//"游标为null了,重置为0,继续扫描"
  12. $iterator = "0";
  13. }
  14. }
  15. $keysList = array_unique($keysList);
  16. return keysList;
  17. }

内容扩展

php redis扩展支持scan命令实现方法

  1. # git clone https://github.com/phpredis/phpredis
  2. # cd phpredis
  3. # /opt/php/bin/phpize
  4. # ./configure --with-php-config=/opt/php/bin/php-config
  5. # make && make install