Sé que hay bibliotecas node.js para Redis; lo que me gustaría hacer es ejecutar un servidor Redis (ya sea en localhost o en un servidor host en algún lugar) y llamarlo directamente a través de HTTP (es decir, AJAX o HTTP GET según sea necesario) desde JavaScript ejecutándose dentro de un navegador (es decir, un Greasemonkey o Chrome Script de extensión, o tal vez un bookmarklet o etiqueta SCRIPT). ¿Redis tiene una API REST o HTTP nativa?¿Puedo conectarme directamente a un servidor Redis desde JavaScript que se ejecuta en un navegador?
¿Puedo conectarme directamente a un servidor Redis desde JavaScript que se ejecuta en un navegador?
Respuesta
No se puede conectar directamente a Redis desde JavaScript ejecutándose en un navegador porque Redis no habla HTTP. Lo que puede hacer es poner webdis en frente de Redis, hace posible trabajar con una instancia de Redis a través de una interfaz HTTP.
Actualmente no hay implementación de Windows: https: //github.com/nicolasff/webdis/issues/138 – icc97
Puede conectarse literalmente al servidor redis a través de http, y hay una vulnerabilidad de seguridad basada en esto.
Redis es efectivamente un servidor HTTP - http://benmmurphy.github.io/blog/2015/06/04/redis-eval-lua-sandbox-escape/
Tal vez esto podría ser utilizado para hacer un cliente Javascript para Redis? En los ejemplos que se muestran, los comandos se envían directamente al servidor redis, que los ejecuta. Sin embargo, en términos prácticos, puede usar openresty + nginx frente a redis para hablar directamente en redis sobre http y obtener el beneficio de rendimiento del servidor multiproceso de nginx que compartirá un conjunto limitado de conexiones para redisearse.
Como explicó @Theo, no se puede conectar directamente, pero si tiene webdis y redis configurados, entonces tengo una biblioteca que elimina el problema con ajax, a favor de un enfoque basado en promesas.
webdismay es una biblioteca JS que he lanzado recientemente (Licencia: MIT) para conectarme a un servidor webdis + redis desde el navegador. Se necesita un enfoque de ES6 Promises para comunicarse con el backend redis + webdis, que proporciona functions para comandos redis genéricos y sin clave y clases organizadas para comandos que operan en Keys/Strings, Lists, Hash y Sets. Todas las funciones/métodos devuelven ES6 Promises.
Suponiendo que tiene webdis configurado con redis, en la configuración predeterminada para aceptar solicitudes de publicación a "/", con webdismay un ejemplo simple de enviar datos al servidor y recuperarlo más tarde se vería así en el navegador (en la ES6):
import 'whatwg-fetch'; // fetch polyfill
import * as W from 'webdismay';
const k = W.key('some-redis-key');
k.set('Hello, World!'); // store the information
// wait a while, e.g. in the dev console or with setTimeout()
k.get().then((v)=>console.log(v)); // --> Hello, World!
en el momento que estoy escribiendo esto (julio de 2016), los dos import
primeras líneas requieren alguna ayuda en la traducción y envasado de herramientas como jspm o browserify (si cambia el import
-require
) .
Esto no es exactamente amigable para principiantes, sin embargo, pero podría permitir a alguien usar webdis + redis desde el navegador sin traducir constantemente mentalmente entre javascript y redis y escribir su propio ajax.
- 1. Ejecutar un archivo JavaScript directamente desde el navegador
- 2. ¿Puedo abrir una conexión websocket a un servidor local que se ejecuta en un puerto arbitrario?
- 3. Llamar a la función C++ desde el script JavaScript que se ejecuta en un control de navegador web
- 4. Intentando conectarme a un servidor MySQL remoto (error 2003)
- 5. Llamar a JavaScript directamente desde TypeScript
- 6. Cómo conectarme a Hadoop/Hive desde .NET
- 7. CoffeScript: no requiere reconocimiento cuando se ejecuta desde el navegador
- 8. Cómo conectarme a un servidor neo4j instalado localmente usando Java
- 9. python. ¿Puedo verificar si el Servidor SMTP está desconectado (para que pueda volver a conectarme?)
- 10. ¿Puede un cliente IRC basado en navegador comunicarse directamente con un servidor IRC?
- 11. ¿Cómo puedo editar un archivo en EC2 directamente desde mi servidor local?
- 12. Invocar un servicio GWT RPC desde Java directamente
- 13. Determinar si los carriles se ejecuta en un servidor web
- 14. Arrastrar y colocar directamente desde Outlook a un formulario web
- 15. ¿Cómo ejecutar SWF sin un navegador (en un servidor Linux)?
- 16. Uso de nginx para servir contenido directamente desde un caché redis
- 17. ¿Cómo enviar un correo directamente al servidor SMTP sin autenticación?
- 18. ¿Cómo puedo disparar un escáner desde un navegador?
- 19. No puedo conectarme a FTP en Gingerbread
- 20. ¿cómo puedo conectarme a un mongodb del código de Ruby?
- 21. ¿Puedo ejecutar un archivo .coffee directamente desde node.js?
- 22. ¿Cómo puedo verificar la versión ASP .NET MVC que se ejecuta en un servidor con un archivo .aspx?
- 23. ¿Cómo se depura un servidor Node.js que se ejecuta con Chrome/WebKit como el depurador remoto?
- 24. Migración de un servidor MySQL de un cuadro a otro
- 25. Android: ¿Cómo puedo mostrar un brindis de un hilo que se ejecuta en un servicio remoto?
- 26. No puedo conectarme al servidor MySQL usando PDO
- 27. Imprimir desde el navegador javascript?
- 28. HTML adjunto que contiene javascript no se ejecuta, ¿cómo puedo hacer que se ejecute?
- 29. ¿Cómo se ejecuta SendMessage desde un hilo diferente?
- 30. ¿Hay otros lenguajes distintos de Objective-J que se "compilan" a JavaScript en el navegador?
Estoy considerando hacer esta pregunta de nuevo, pero estipulando que queremos un cliente de redis real en tiempo real, no HTTP, que opere en el navegador. Podría crear una gran 'infraestructura' en tiempo real con solo los activos de servicio de CDN que constituyen la aplicación de cliente del cliente que se comunica directamente con Redis. Quiero cortar el aspecto innecesario del servidor WebSocket del sistema. Toda la lógica de control puede ser internalizada para redis cluster en Lua. –
http://stackoverflow.com/questions/33241247/what-would-it-take-to-implement-a-good-redis-client-in-the-web-browser –