Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php redis(new redis())getKeys()方法正在使用;钥匙*”;或;扫描";有迭代吗?_Php_Redis_Key - Fatal编程技术网

php redis(new redis())getKeys()方法正在使用;钥匙*”;或;扫描";有迭代吗?

php redis(new redis())getKeys()方法正在使用;钥匙*”;或;扫描";有迭代吗?,php,redis,key,Php,Redis,Key,我使用的是php redis软件包,这些软件包大部分在最流行的repos中提供。你称之为 $redis = new Redis(); $redis->connect('127.0.0.1', 6379); 如果我在这里 $var = $redis->getKeys('something.*'); 在后端,它会执行同步和阻塞吗 KEYS something.* 或者将使用无阻塞的迭代扫描,允许并发线程作为 SCAN 0 MATCH something.* COUNT 10 SCA

我使用的是php redis软件包,这些软件包大部分在最流行的repos中提供。你称之为

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
如果我在这里

$var = $redis->getKeys('something.*');
在后端,它会执行同步和阻塞吗

KEYS something.*
或者将使用无阻塞的迭代扫描,允许并发线程作为

SCAN 0 MATCH something.* COUNT 10
SCAN $iteratorFromLastCall MATCH something.* COUNT 10
... 
while ($iteratorFromLastCall > 0);
还是类似的

由于前者不应用于生产,并且在开发过程中不会出现任何问题,因此后者“不太可靠”,但对于高可用性需求来说更可靠

我需要使用吗

$redis->scan()
然后自己迭代光标,或者

$redis->getKeys()
是否已“安全生产”避免使用“键*”?

您可以从中看到
getKeys()
使用
KEYS
命令:

/* {{{ proto array Redis::getKeys(string pattern)
 */
PHP_METHOD(Redis, getKeys)
{
    REDIS_PROCESS_KW_CMD("KEYS", redis_key_cmd, redis_mbulk_reply_raw);
}
/* }}} */
因此,您需要使用第二个选项,使用
scan()
和迭代。正如您所说,对于生产环境:

<强>警告:< /强>将键视为只应在生产环境中极其谨慎地使用的命令。当它在大型数据库上执行时,可能会破坏性能。此命令用于调试和特殊操作,例如更改键空间布局。不要在常规应用程序代码中使用密钥。如果您正在寻找在键区的一个子集中找到键的方法,请考虑使用扫描或设置。


我想您正在寻找
HSET
HGETALL
。HGETALL是异步的吗?还是以与“键*”相同的方式阻塞?如果我使用键值存储,并且每天有几次我通过类似“something.*”的匹配模式搜索键值,那么你确定HSET是最理想的数据集吗?啊,那么我最终使用的是PhpRedis。“predis”的存在让我困惑。谢谢,他们(phpredis)甚至在github上的文档中有一个很好的代码示例用于扫描。@dszakal据我所知,您使用的是PHP扩展而不是包(即来自composer),因此您没有使用,而是。