繁体   English   中英

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

[英]Can I connect directly to a Redis server from JavaScript running in a browser?

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

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

您可以通过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本身共享一组有限的连接。

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

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

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

webdismay是我最近发布的JS库(许可证:MIT),用于从浏览器连接到webdis + redis后端。 它采用ES6 Promises方法与redis + webdis后端进行通信,为通用和无密钥redis命令提供函数 ,并为按键/字符串列表哈希集合操作的命令提供有组织的类。 所有函数/方法都返回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更改为require )。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM