2011-04-22 61 views
27

我知道有Redis的node.js庫;我想要做的(無論是在本地主機或服務器主機上的某個地方)運行Redis的服務器,並直接通過HTTP(即AJAX或HTTP GET根據需要)從JavaScript的瀏覽器中運行調用它(即Greasemonkey的或Chrome擴展腳本,或者一個小書籤或SCRIPT標籤)。 Redis是否有本地REST或HTTP API?我可以直接連接到運行在瀏覽器中的JavaScript的Redis服務器嗎?

+0

我在考慮再次提出這個問題,但規定我們希望在實時redis-client中使用'真實',而不是HTTP在瀏覽器中運行。可以構建一個偉大的實時「基礎架構」,只需構建客戶端webapp的CDN服務資產,即可直接與Redis進行通信。我想刪除系統中不必要的WebSocket服務器方面。所有的控制邏輯可以內部化爲Lua中的redis集羣。 – 2015-10-20 15:07:34

+0

http://stackoverflow.com/questions/33241247/what-would-it-take-to-implement-a-good-redis-client-in-the-web-browser – 2015-10-20 15:54:16

回答

34

你不能直接從JavaScript運行在瀏覽器連接到Redis的,因爲Redis的不說話HTTP。你可以做的是把webdis放在Redis前面,它可以通過HTTP接口使用Redis實例。

+0

目前沒有Windows實現:https: //github.com/nicolasff/webdis/issues/138 – icc97 2017-03-10 13:40:24

2

你可以從字面上連接到Redis的服務器通過HTTP,並有基於此安全漏洞。

的Redis是一個有效的HTTP服務器 - 也許這可以被用來製造Redis的一個JavaScript客戶端http://benmmurphy.github.io/blog/2015/06/04/redis-eval-lua-sandbox-escape/

?在顯示的示例中,命令直接發送到執行它們的redis服務器。然而,實際地說,你可以使用openresty在Redis的面前+ nginx的基本上直接對話的Redis通過HTTP,並得到nginx的的多線程服務器的性能優勢,這將共享一組有限的連接到Redis的本身。

1

由於@Theo解釋的,你不能直接連接,但如果你有設置然後webdis和Redis的我有消除周圍阿賈克斯擺弄自己的圖書館,取而代之的是一個方法的承諾。

webdismay是JS庫我最近公佈的(許可證:MIT)連接到來自瀏覽器的webdis + Redis的後端。採用ES6 Promises方法與redis + webdis後端進行通信,爲通用和無鑰redis命令提供functions,併爲在Keys/StringsListsHashSets上運行的命令組織類。所有的函數/方法都返回ES6 Promises。

假設你已經將webdis設置爲redis,在缺省配置中接受發送請求爲「/」,然後通過webdis可以將數據發送到服務器並稍後恢復它的一個簡單示例在瀏覽器上看起來像這樣(在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),前兩條import線需要從像JSPM或browserify工具的一些翻譯和打包援助(如果你改變了importrequire) 。

這不是初學者友好的,但可以允許某人在瀏覽器中使用webdis + redis,而不必在JavaScript語言和redis之間不斷翻譯並編寫自己的ajax。

相關問題