2013-03-02 36 views
0

我在學習Redis。我可以使用Ruby Client for Redis設置和獲取關鍵值對。Redis:如何以編程方式在ruby客戶端加載dump.rdb

我現在試圖從自定義路徑存儲和加載dump.rdb。 我執行以下步驟:

  • 我編程設置爲dump.rdb目錄在我的Ruby腳本。
  • 然後我可以選擇創建新數據或加載現有數據。
  • 我在第一次執行ruby腳本時創建了新的數據。
  • 我再次運行我的紅寶石腳本並加載現有的數據。產量如預期。

但是,當我重新啓動redis服務器並運行相同的ruby腳本(它再次以編程方式設置dump.rdb的目錄)並嘗試加載數據時,它不這樣做。

有沒有一種方法以編程方式獲取redis服務器加載dump.rdb後,我在配置中設置'dir'參數?

我看了看Redis Ignoring directory in redis.conf,並試圖在谷歌搜索這個。總是可以選擇在redis.conf中設置dump.rdb的路徑,但我希望以編程方式進行。

我的Ruby代碼如下:

require 'redis' 

client = Redis.new 
client.config('set', 'dir', '/tmp') 

puts 'Enter load(to load existing data) or new(to create new data)' 
print 'prompt>' 
command = gets.chomp 

if command == 'new' 
    client.flushdb 

    client.set('key1', 'value1') 
    client.set('key2', 'value2') 

    client.save 
else 
    puts client.get('key1') 
    puts client.get('key2') 
end 

這裏是執行Ruby腳本的輸出:

laptop:~/ruby/workspace$ ruby test.rb 
Enter load(to load existing data) or new(to create new data) 
prompt>new 

laptop:~/ruby/workspace$ ruby test.rb 
Enter load(to load existing data) or new(to create new data) 
prompt>load 
value1 
value2 

# Now i restart redis-server 

laptop:~/ruby/workspace$ ruby test.rb 
Enter load(to load existing data) or new(to create new data) 
prompt>load 


# No output is printed 

軟件詳細信息:

  • 操作系統:Ubuntu Linux操作系統的12.04 64 bit
  • Redis版本2.6.9在默認配置下運行本地主機
  • 紅寶石:版本1.9.3p327(2012年11月10日修訂37606)x86_64的Linux的]

請讓我知道如果你需要從我的一部分的任何其他信息。

回答

0

我相信你在加載「自定義rdb」之後是使用「config set」命令來設置轉儲文件的路徑。請注意,它需要在與Redis守護程序相同的主機上爲才能正常工作。一旦你用上面的命令指定了它,你的工作就沒有完成。除啓動時以外,Redis不從文件系統讀取數據。

因此,爲了做到這一點,您需要有一個重新啓動Redis的主管進程。然後,你需要保存到磁盤

  • 將轉儲文件名的

    1. 轉到使用
    2. 告訴服務器關閉
    3. 的服務等待由上級守護
    4. 重新啓動

    即使這樣,它也不會工作,因爲啓動時服務器將從磁盤讀取配置。我不知道Redis的命令將其運行時配置保存到磁盤,並且不相信它存在。

    我不確定你爲什麼要這樣做,但我相信如果沒有在Redis之外編碼來管理它,它就無法工作。也許如果你澄清了爲什麼你認爲你需要這樣做,我們可以得到更好的幫助。

    編寫非Redis代碼的缺點是您可以運行多個實例,每個實例都配置爲您需要它使用的轉儲文件;然後選擇客戶端上的哪一個並使用適當的一個。

  • +0

    對於遲到的回覆,我表示歉意。我認爲你的解決方案有多個redis實例,每個配置爲不同的dump.rdb將適用於我。 – user1290793 2013-03-05 19:27:58

    相關問題