2012-03-08 19 views
6

Soy muy nuevo en Redis y sigo jugando con él. Quiero probar para ver si es relevante para mi proyecto, pero no estoy seguro acerca de un comando específico que estoy ejecutando. Los usuarios de SO me convencieron de los beneficios de rendimiento de usar tuberías y transacciones, así que pensé en preguntar cómo hacerlo.¿Puede redis canalizar múltiples comandos que dependen de los anteriores?

Básicamente tengo dos declaraciones que sólo quiero emitir y no tener que esperar a que el resultado (que parece ser un buen candidato para el revestimiento de tuberías Parece que este:.

Does valueX exist? 
If it does insert valueY 

Es bastante simple pero tan todas las formas en que he estado buscando parecen esperar una respuesta si ValueX existe, y porque estoy haciendo más de mil millones de bucles de mi programa, lo detiene.

¿Es esto posible? me ayuda a usar Java pero no me he decidido en qué biblioteca de cliente (jedis o jredis, todavía estoy probando). En realidad, ni siquiera estoy totalmente preparado para redis, pero me inclino muy fuertemente hacia él (parece bueno para lo que estoy haciendo a la velocidad), por lo que cualquier sugerencia es aceptable.

Respuesta

6

No, por el momento no es posible lograr tal cosa. Lo que buscas es una función que falta por el momento, pero estará disponible con la versión 2.6 de Redis. Se llama scripting LUA. Puede ejecutar comandos de servidor que dependen de comandos previos, todo en uno, sin la necesidad de obtenerlos en el cliente. Para más detalles, ver here.

+0

Muchas gracias por su respuesta. Me alegra ver que se acerca, pero realmente no quiero esperar, así que pensé: ¿puedo construir algo así en mi programa? Aquí está la lógica, tengo un método al que le envié pares de valores de búsqueda/escritura, y pone en cola las solicitudes y las ejecuta en una transacción. ¿Entonces el resto de mi programa puede continuar mientras esta parte está en cola? –

+1

Puede canalizar un lote de comandos de búsqueda, esperar los resultados y luego canalizar algunos comandos de escritura. Puede hacerlo en un subproceso/proceso separado, como para no bloquear hasta que los resultados estén disponibles. – hymloth

+0

buena sugerencia, intentaré darle una oportunidad. ¡Gracias! –

Cuestiones relacionadas