我可以从浏览器中运行的JavaScript直接连接到Redis服务器吗?

时间:2011-04-22 19:16:54

标签: javascript api rest redis

我知道Redis有node.js库;我想做的是运行Redis服务器(在localhost或某个服务器主机上),并通过浏览器内运行的JavaScript(即Greasemonkey或Chrome)直接通过HTTP(即AJAX或HTTP GET,根据需要)调用它扩展脚本,或者可能是bookmarklet或SCRIPT标记)。 Redis是否具有本机REST或HTTP API?

4 个答案:

答案 0 :(得分:39)

您无法通过浏览器中运行的JavaScript直接连接到Redis,因为Redis不会说HTTP。你可以做的是将webdis放在Redis前面,它可以通过HTTP接口使用Redis实例。

答案 1 :(得分:2)

您可以通过http直接连接到redis服务器,并且基于此安全漏洞。

  

Redis实际上是一个HTTP服务器     - http://benmmurphy.github.io/blog/2015/06/04/redis-eval-lua-sandbox-escape/

也许这可以用来为redis创建一个javascript客户端?在所示的示例中,命令直接发送到执行它们的redis服务器。但是,实际上,你可以在redis前面使用openresty + nginx来直接通过http与redis对话,并获得nginx的多线程服务器的性能优势,它将与redis本身共享一组有限的连接。 / p>

答案 2 :(得分:1)

正如@Theo解释的那样,你无法直接连接,但是如果你设置了webdis和redis,那么我就有了一个库来消除你自己的ajax,支持基于promises的方法。

webdismay是我最近发布的JS库(许可证:MIT),用于从浏览器连接到webdis + redis后端。它采用ES6 Promises方法与redis + webdis后端进行通信,为通用和无密钥redis命令提供functions,并为Keys/StringsLists,{{ 3}}和Hash。所有函数/方法都返回ES6 Promises。

假设您已使用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月),前两行import行需要jspm或browserify等工具提供一些翻译和打包帮助(如果您将import更改为{{1 }})。

这不是初学者友好的,但可以允许某人使用浏览器中的webdis + redis,而无需在javascript惯用语和redis之间进行精神上的翻译,并编写自己的ajax。

答案 3 :(得分:1)

与在redis前使用NGINX服务器相比,Webdis非常慢

如果您只是在mod-perl中实现一个简单的redis客户端并在nginx后面展示,那么您可以轻松获得非常好的性能。你也可以处理很多逻辑