2016-01-12 125 views
7

使用Lua當我指定全鍵名我有我正在考慮遷移到Redis的集羣應在Redis的集羣

我應該指定全鍵名的Lua腳本時調用http://redis.io/commands/eval? 或者我可以通過指定哈希標籤離開嗎?

比如我想只傳遞 {} UNIQUE_HASH_TAG代替{} UNIQUE_HASH_TAG /鍵1,{} UNIQUE_HASH_TAG/KEY 2 ...等的

我有很多按鍵,和邏輯是相當複雜的 - 有時我最終會動態生成密鑰名稱,但在之間的同一個哈希標記。

我會違反一些規範通過傳遞只是散列標籤,而不是鍵名?

回答

3

我應該指定全鍵名

這是建議的做法。

我會違反一些規範

號,規格不聲明鍵名需要明確地傳遞。在爲羣集做準備之前,但在羣集實際出現之前,已經採用了這種機制。那時,散列標籤並不是集羣設計的一部分,所以建議是爲了避免在腳本中硬編碼/動態生成關鍵字名稱,因爲不能保證它們將在同一個集羣散列槽中。

您的方法是完全有效的,並會按預期工作。我想強調一點,如果你管理了很多所謂的{UNIQUE_HASH_TAG},那麼這種情況纔有意義 - 否則你只會碰到幾個可能成爲可擴展性挑戰的時隙。

編輯:所有這一切說,你真的應該始終明確地傳遞鍵值名的腳本,而不是欺騙。雖然目前尚未封鎖,但未指定的行爲可能會在將來發生變化,並導致代碼崩潰。

+0

這將使我的遷移完全不可能,不幸的是,我無法避免在運行中創建密鑰(如果我們有嵌套的數據類型,比如設置內部集合,這將不需要),但是當我這樣做時,我總是在hashtag中執行... – let4be

+1

對於我的任務,我只需要來自redis羣集的某些功能,例如在節點之間重新平衡數據的能力。作爲替代方案,我正在考慮通過Lua +'Move'命令手動實現此操作(將數據集標記爲不可用,將數據集序列化到一個鍵中,原子移動到另一個實例,反序列化,標記爲可用於新實例,刪除原始數據集) - 但這看起來像重新發明了輪子 – let4be