Непонятное поведение автоматического префикса ключа Phpredis, комбинация команд KEYS / SCAN и TTL

При использовании автоматических префиксов ключей в phpredis, например.

$redis->setOption(Redis::OPT_PREFIX, 'dev:');

TTL Команда работает не так, как ожидалось, в сочетании с результатом КЛЮЧИ или же SCAN команды.

Я думаю, что лучшее объяснение поведения — фрагмент кода ниже:

<?php

$redis = new Redis();
$redis->connect('127.0.0.1', 6379, 5);
$redis->setOption(Redis::OPT_PREFIX, 'dev:');

$redis->set('foo', 'bar'); // Will actually set key "dev:foo" with value "bar"
$keyPattern = '*';
$iterator = null;
$keys = [];

// Get all keys stored in Redis using SCAN
while (false !== ($result = $redis->scan($iterator, $keyPattern)))
{
foreach ($result as $key)
{
if (!in_array($key, $keys))
{
$keys[] = $key;
}
}
}

// Getting TTL-s
foreach ($keys as $key)
{
// This will actually now look for "dev:dev:foo" key TTL not "dev:foo"// because prefix "dev:" is added automatically. Is this bug or feature?
echo $redis->ttl($key);
// will echo -2 because "dev:dev:foo" does not exist
}

Это ошибка или особенность?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]