sql >> Base de Datos >  >> NoSQL >> Redis

Encontrar valores mediante el uso de un nombre de clave parcial en un conjunto ordenado de Redis

Aquí hay una respuesta actualizada para 2015.

Si puede actualizar Redis por encima de 2.8, el comando SCAN con MATCH funcionará para esto. Antes de esa versión, no tanto, y NO use el comando KEYS excepto en un entorno de desarrollo.

http://redis.io/commands/scan

Ejemplo en línea 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"

Ejemplo en 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";
}

Tenga en cuenta que el código php no está probado y de la documentación central, por ejemplo, aquí. El código de producción deberá modificarse según las claves necesarias para buscar.

Para aquellos en Ubuntu, aquí están las instrucciones para actualizar php5-redis:

  1. Descargue el paquete 2.2.7 aquí:http://pecl.php.net/package/redis
  2. $ php -i | grep Redis Redis Support => enabled Redis Version => 2.2.4
  3. Siga las instrucciones en README para phpizar, configurar e instalar
  4. Cree un enlace simbólico para el paquete cli de la línea de comandos:cd /etc/php5/cli/conf.d && sudo ln -s ../../mods-available/redis.ini 20-redis.ini
  5. $ php -i | grep Redis Redis Support => enabled Redis Version => 2.2.7