我可以从浏览器中运行的JavaScript直接连接到Redis服务器吗?
Can I connect directly to a Redis server from JavaScript running in a browser?
我知道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后面暴露,你可以很容易地获得非常好的性能。你也可以处理很多逻辑
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 如何使用密码检测网络中的状态连接
- 如何处理node.js节点mongodb中的连接和查询队列
- Rails-JQueryUIAutcomplete和AJAX不工作,可以't连接到数据库
- Twilio-显示所有连接参与者的远程参与者视频
- 操作放置在画布上的元素之间的连接
- TypeError:_this.store.getState在使用来自Redux的连接时不是函数
- jQuery UI可排序-多连接列表拖动
- 如何使用offer/answer交换来自两个对等连接的流
- 单个 Redis 客户端连接是否支持并发读写
- 如何在数据库断开连接时处理Redis会话
- 如何在 redis 中将 JS 对象传递给它自己的事件参数 - 连接事件上的哨兵
- 是否可以从浏览器创建与 redis 服务器的连接
- 具有redis连接的外部数据库
- redis的处理能力;N'没有连接
- node.js连接redis redis.get(key,callback)返回null
- 如何使用node.js, socket .js触发事件在连接的客户端上触发.IO和redis
- 我应该保持我的redis连接持久吗?
- 使用(客户端)javascript直接连接Redis
- Redis连接失败