Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

Ответ 2

Вы можете буквально подключиться к серверу 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, который будет совместно использовать ограниченный набор подключений для самого себя.

Ответ 3

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

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

Предполагая, что у вас есть 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 или браузера (если вы меняете import на require).

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