2011-04-22 17 views
27

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?

+0

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. –

+0

http://stackoverflow.com/questions/33241247/what-would-it-take-to-implement-a-good-redis-client-in-the-web-browser –

Respuesta

34

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.

+0

Actualmente no hay implementación de Windows: https: //github.com/nicolasff/webdis/issues/138 – icc97

2

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.

1

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.

Cuestiones relacionadas