Могу ли я подключиться напрямую к серверу Redis из JavaScript, запущенного в браузере? - PullRequest
38 голосов
/ 22 апреля 2011

Я знаю, что есть библиотеки node.js для Redis;то, что я хотел бы сделать, это запустить сервер Redis (либо на локальном хосте, либо где-нибудь на хосте сервера) и вызывать его напрямую через HTTP (например, AJAX или HTTP GET при необходимости) из JavaScript, работающего внутри браузера (т.е. Greasemonkey или ChromeСценарий расширения, или, возможно, букмарклет или тег SCRIPT).У Redis есть собственный REST или HTTP API?

Ответы [ 4 ]

41 голосов
/ 22 апреля 2011

Невозможно подключиться напрямую к Redis из JavaScript, запущенного в браузере, поскольку Redis не говорит по HTTP. Что вы можете сделать, это поместить webdis перед Redis, это позволяет работать с экземпляром Redis через HTTP-интерфейс.

2 голосов
/ 04 июня 2018

Webdis работает очень медленно по сравнению с использованием сервера NGINX перед redis

Если вы просто реализуете простой клиент redis в mod-perl и выставляете за nginx, вы можете легко получить очень хорошую производительность.И вы можете справиться с большим количеством логики тоже

2 голосов
/ 17 мая 2016

Вы можете буквально подключиться к серверу redis по протоколу http, и на этом основано средство защиты.

Redis фактически является сервером HTTP - http://benmmurphy.github.io/blog/2015/06/04/redis-eval-lua-sandbox-escape/

Может быть, это можно использовать для создания клиента JavaScript для Redis?В показанных примерах команды отправляются непосредственно на сервер redis, который их выполняет.Однако, на практике, вы можете использовать openresty + nginx перед redis, чтобы по существу напрямую общаться с redis через http, и получить преимущество в производительности многопоточного сервера nginx, который будет использовать ограниченный набор соединений для самого redis.

1 голос
/ 26 июля 2016

Как объяснил @Theo, вы не можете подключиться напрямую, но если у вас настроены webdis и redis, у меня есть библиотека, которая устраняет перебирание с помощью ajax самостоятельно, в пользу подхода, основанного на обещаниях.

webdismay - это библиотека JS, которую я недавно выпустил (лицензия: MIT) для подключения к веб-интерфейсу + redis из браузера. Он использует подход ES6 Promises для связи с серверной частью redis + webdis, предоставляя функции для общих и неключевых команд redis и организованные классы для команд, которые работают с Keys / Strings , Списки , Хеш и Наборы . Все функции / методы возвращают обещания ES6.

Если у вас настроен webdis с помощью redis, в конфигурации по умолчанию для приема запросов на публикацию к "/", то с помощью webdismay простой пример отправки данных на сервер и их последующего получения будет выглядеть в браузере следующим образом ( в 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!

В то время, когда я пишу это (июль 2016 года), первые две строки import требуют некоторой помощи по переводу и упаковке от таких инструментов, как jspm или browserify (если вы измените import на require).

Это пока не совсем удобно для новичков, но может позволить кому-то использовать webdis + redis из браузера, не переводя мысленно между javascript идиомами и redis и не записывая свой собственный ajax.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...