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

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

本文关键字:连接 Redis 服务器 浏览器 运行 JavaScript 我可以      更新时间:2023-09-26

我知道Redis有node.js库;我想做的是运行一个Redis服务器(无论是在本地主机或服务器主机的某个地方),并通过HTTP直接调用它(即AJAX或HTTP GET根据需要)从浏览器内运行的JavaScript(即Greasemonkey或Chrome扩展脚本,或者可能是一个书签或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服务器执行。然而,实际上,你可以在redis前面使用openresty+nginx,本质上直接通过http与redis对话,并获得nginx的多线程服务器的性能优势,它将共享一组有限的连接到redis本身。

正如@Theo解释的那样,你不能直接连接,但是如果你已经设置了webdis和redis,那么我有一个库,可以消除你自己与ajax的混乱,支持基于承诺的方法。

web惊愕是我最近发布的一个JS库(许可:MIT),用于从浏览器连接到webdis+redis后端。它采用ES6 Promises方法与redis+webdis后端进行通信,为通用和无键redis命令提供函数,并为操作键/字符串、列表、哈希和集合的命令提供组织类。所有函数/方法都返回ES6承诺。

假设你已经用redis设置了webdis,在默认配置中接受发送到"/"的请求,那么使用web惊愕发送数据到服务器并稍后获取数据的简单示例将在浏览器上看起来像这样(在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。

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

如果你只是在mod-perl中实现一个简单的redis客户端,并在nginx后面暴露,你可以很容易地获得非常好的性能。你也可以处理很多逻辑