web-dev-qa-db-ja.com

ブラウザで実行されているJavaScriptからRedisサーバーに直接接続できますか?

Redis用のnode.jsライブラリがあることは知っています。私がしたいことは、Redisサーバーを実行し(localhostまたはサーバーHostのどこかで)、HTTP経由で直接呼び出す(つまり、AJAXまたは必要に応じてHTTP GET)を実行しているJavaScriptからブラウザ内(つまり、GreasemonkeyまたはChrome拡張スクリプト、あるいはブックマークレットまたはSCRIPTタグ)。RedisにはネイティブのRESTまたはHTTP APIがありますか?

39
AlexChaffee

RedisはHTTPを話さないため、ブラウザーで実行されているJavaScriptからRedisに直接接続することはできません。あなたができることは、Redisの前に webdis を置くことです。これにより、HTTPインターフェースを介してRedisインスタンスを操作できるようになります。

42
Theo

Redisの前でNGINXサーバーを使用する場合と比較して、Webdisは非常に遅い

Mod-Perlに単純なredisクライアントを実装し、nginxの背後に公開するだけで、非常に優れたパフォーマンスを簡単に得ることができます。そして、あなたもたくさんのロジックを扱うことができます

2
Ram

文字通りhttp経由でredisサーバーに接続でき、これに基づいたセキュリティの悪用があります。

Redisは実質的にHTTPサーバーです- http://benmmurphy.github.io/blog/2015/06/04/redis-eval-lua-sandbox-escape/

多分これはredis用のJavaScriptクライアントを作るために使用できますか?示されている例では、コマンドはredisサーバーに直接送信され、redisサーバーがそれらを実行します。ただし、実際には、redisの前でopenresty + nginxを使用して、http経由で本質的に直接redisと通信し、nginxのマルチスレッドサーバーのパフォーマンス上の利点を得ることができます。

2
eyeApps LLC

@Theoが説明したように、直接接続することはできませんが、webdisとredisがセットアップされている場合は、promiseベースのアプローチを優先して、ajaxをいじるのを排除するライブラリを用意しています。

webdismay は、ブラウザからwebdis + redisバックエンドに接続するために最近リリースした(ライセンス:MIT)JSライブラリです。 ES6 Promisesアプローチを使用してredis + webdisバックエンドと通信し、ジェネリックおよびキーレスredisコマンドに functions を提供し、 Keys/Strings で動作するコマンドにクラスを整理します。 リストハッシュ および セット 。すべての関数/メソッドはES6プロミスを返します。

「/」への投稿リクエストを受け入れるデフォルトの設定で、redisを使用してwebdisをセットアップしていると仮定すると、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年7月)で、最初の2つのimport行には、jspmやbrowserify(importrequire)。

これはまだ初心者に優しいわけではありませんが、JavaScriptのイディオムとredisの間で常に精神的に翻訳し、独自のajaxを書くことなく、誰かがブラウザからwebdis + redisを使用できるようにする可能性があります。

1
Paul