Redis用のnode.jsライブラリがあることは知っています。私がしたいことは、Redisサーバーを実行し(localhostまたはサーバーHostのどこかで)、HTTP経由で直接呼び出す(つまり、AJAXまたは必要に応じてHTTP GET)を実行しているJavaScriptからブラウザ内(つまり、GreasemonkeyまたはChrome拡張スクリプト、あるいはブックマークレットまたはSCRIPTタグ)。RedisにはネイティブのRESTまたはHTTP APIがありますか?
RedisはHTTPを話さないため、ブラウザーで実行されているJavaScriptからRedisに直接接続することはできません。あなたができることは、Redisの前に webdis を置くことです。これにより、HTTPインターフェースを介してRedisインスタンスを操作できるようになります。
Redisの前でNGINXサーバーを使用する場合と比較して、Webdisは非常に遅い
Mod-Perlに単純なredisクライアントを実装し、nginxの背後に公開するだけで、非常に優れたパフォーマンスを簡単に得ることができます。そして、あなたもたくさんのロジックを扱うことができます
文字通り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のマルチスレッドサーバーのパフォーマンス上の利点を得ることができます。
@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(import
をrequire
)。
これはまだ初心者に優しいわけではありませんが、JavaScriptのイディオムとredisの間で常に精神的に翻訳し、独自のajaxを書くことなく、誰かがブラウザからwebdis + redisを使用できるようにする可能性があります。