Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Localizando valores usando o nome da chave parcial em um conjunto classificado do Redis


Aqui está uma resposta atualizada para 2015.

Se você puder atualizar o Redis acima de 2.8, o comando SCAN com MATCH funcionará para isso. Antes dessa versão, nem tanto, e NÃO use o comando KEYS exceto em um ambiente de desenvolvimento.

http://redis.io/commands/scan

Exemplo na linha de comando:
$ redis-cli
127.0.0.1:6379> scan 0 match V3.0:*
1) "0"
2) 1) "V3.0:UNITTEST55660BC7E0C5B"
   2) "V3.0:shop.domain.com:route"
   3) "V3.0:UNITTEST55660BC4A2548"
127.0.0.1:6379> scan 0 match V1.0:*
1) "0"
2) (empty list or set)
127.0.0.1:6379> scan 0 match V3.0:*
1) "0"
2) 1) "V3.0:UNITTEST55660BC7E0C5B"
   2) "V3.0:shop.domain.com:route"
   3) "V3.0:UNITTEST55660BC4A2548"

Exemplo em PHP:
// Initialize our iterator to NULL
$iterate = null;

// retry when we get no keys back
$redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY);

while ($arr_keys = $redis->scan($iterate, 'match:*')) {
    foreach ($arr_keys as $str_key) {
        echo "Here is a key: $str_key\n";
    }
    echo "No more keys to scan!\n";
}

Observe que o código php não é testado e da documentação principal, por exemplo, aqui. O código de produção precisaria ser modificado dependendo das chaves necessárias para pesquisar.

Para aqueles no Ubuntu, aqui estão as instruções para atualizar o php5-redis:
  1. Baixe o pacote 2.2.7 aqui:http://pecl.php.net/package/redis
  2. $ php -i | Suporte grep RedisRedis => versão enabledRedis => 2.2.4
  3. Siga as instruções no README para phpize, configure, faça a instalação
  4. Crie um link simbólico para o pacote cli da linha de comando:cd /etc/php5/cli/conf.d &&sudo ln -s ../../mods-available/redis.ini 20-redis.ini
  5. $ php -i | Suporte grep RedisRedis => versão enabledRedis => 2.2.7