Redis速度非常快。對於我的機器上的大多數部分來說,它與node.js中的本地Javascript語句或函數調用一樣快。在node.js中編寫常規的Javascript代碼很容易/無痛,因爲不需要回調。我不明白爲什麼使用node.js在Redis中獲取/設置鍵/值數據不那麼容易。是否有一個用於node.js的阻塞redis庫?
假設node.js和Redis在同一臺機器上,是否有任何npm庫允許在node.js上使用阻塞調用與Redis進行交互?我知道這必須是一個與V8接口的C/C++庫。
Redis速度非常快。對於我的機器上的大多數部分來說,它與node.js中的本地Javascript語句或函數調用一樣快。在node.js中編寫常規的Javascript代碼很容易/無痛,因爲不需要回調。我不明白爲什麼使用node.js在Redis中獲取/設置鍵/值數據不那麼容易。是否有一個用於node.js的阻塞redis庫?
假設node.js和Redis在同一臺機器上,是否有任何npm庫允許在node.js上使用阻塞調用與Redis進行交互?我知道這必須是一個與V8接口的C/C++庫。
我想你要確保你所有的redis插入操作已經執行完畢。爲此,您可以使用MULTI命令插入密鑰或執行其他操作。 https://github.com/mranney/node_redis模塊對推入多對象的命令進行排隊,並相應地執行它們。
這樣你只需要一次回調,在exec調用結束時。
雖然Redis很快,但它不是即時的...這就是爲什麼你要必須如果你想繼續執行,確保你的值在那裏使用回調。
我認爲你的唯一方法可能(並且我不建議你這樣做)實現這個使用一個回調與一個變量是謂詞離開一個計時器。
阻止代碼創建一個MASSIVE瓶頸。
如果您使用阻止碼,您的服務器將變爲INCREDIBLY緩慢。
請記住,節點是單線程的。因此,任何阻止代碼將阻止連接客戶端的每個節點。
您自己的基準測試顯示,它的速度足以滿足一個客戶端的需求。你有1000個客戶的基準嗎?如果你嘗試這個,你會看到爲什麼阻止代碼是不好
這顯然會否定node.js的好處。 +1 – jcolebrand 2011-05-23 15:15:49
我不認爲同步訪問運行在與node.js相同的服務器上的Redis會產生巨大的瓶頸。我在Redis key/val DB上的大部分get/set操作都閃電般快速。 – rafidude 2011-05-23 16:06:54
@ pm8他們對於一個客戶來說閃電般快。但是如果你同時做1000個呢?巨大的瓶頸。 – Raynos 2011-05-23 16:07:59
對於那些試圖習慣Node節點編程模型的開發人員來說,這看起來像是一個常見的熊陷阱。
會發生什麼情況是:遇到異步/回調模式不適合的情況,你需要做一些阻止代碼的方法,你可以要求Google/StackExchange介紹Node中的阻塞,而你所得到的只是告誡封鎖有多糟糕。
他們是正確的 - 阻止,(「在做任何事情之前等待這個結果」),這不是你應該嘗試在Node中做的事情。但我認爲更有幫助的是要認識到99.9%的時間,你並不是在尋找阻止的方法,你只是在尋找一種方法來製作你的應用,「等待這樣的結果在繼續這樣做之前,「這不完全是一回事。
嘗試尋找Node中的「流量控制」的概念,而不是「阻塞」某些設計模式,這些設計模式可能更清晰地適合您正在嘗試做的事情。這裏的庫列表檢查出:
https://github.com/joyent/node/wiki/modules#wiki-async-flow
我是新來的節點太多,但我真的挖異步:https://github.com/caolan/async
你不想在節點阻塞庫。 – Raynos 2011-05-23 15:14:06
你能解釋一下你爲什麼想以一種引人注目和有用的方式在nodejs上阻塞調用嗎? – jcolebrand 2011-05-23 15:15:07
我知道攔截呼叫可能會造成巨大的瓶頸。我可以使用原生的Javascript函數(例如:正則表達式等),並以V8中快速執行的阻止方式進行循環。如果獲取/設置Redis數據幾乎一樣快,爲什麼我不能使用一些具有getSync,hsetSync等功能的阻塞Redis庫?這使得編寫代碼更容易(val = client.getSync(key);#1 line)而不是使用回調(3+行)。 – rafidude 2011-05-23 16:03:30