簡體   English   中英

Rails和Redis

[英]Rails and Redis

使用以下命令在我的控制台上啟動redis服務器后:

redis-server

我像這樣執行以下ruby腳本:

script/user/generate_roster_kids.rb start

但它不起作用,我得到:

generate_roster_kids] Pid not found, process seems doesn't exist!
[generate_roster_kids] Process daemonized with pid 1110 with thread and Forever v.0.3.2

如果我再次執行相同的命令,我得到以下內容:

generate_roster_kids] Found pid 1110...
[generate_roster_kids] Waiting the daemon's death . DONE
[generate_roster_kids] Process daemonized with pid 1385 with thread and Forever v.0.3.2

但它不起作用,我做錯了什么。

這是generate_roster_kids.rb文件的內容:

#!/usr/bin/ruby
require 'rubygems' unless defined?(Gem)
require 'forever'
require 'redis'

Forever.run do
  REDIS = Redis.new()
  #
  # dir  "foo"     # Default: File.expand_path('../../', __FILE__)
  # file "bar"     # Default: __FILE__
  log  "bar.log" # Default: File.expand_path(dir, '/log/[file_name].log')
  # pid  "bar.pid" # Default: File.expand_path(dir, '/tmp/[file_name].pid')

  every 2.seconds do
    # REDIS.DEL :busy

    # begin
    #   REDIS.SUNIONSTORE :busy, REDIS.keys('Busy:*') 
    # rescue 
    #   REDIS.SUNIONSTORE :busy, nil
    # end

    REDIS.SUNIONSTORE :busy, REDIS.keys('Busy:*') rescue REDIS.SUNIONSTORE :busy, nil
    REDIS.EXPIRE :busy, 3

    # online = REDIS.SUNION :online, REDIS.keys('Online:*')
    # diff = REDIS.SDIFF online, :busy

    # REDIS.SDIFFSTORE :online, (REDIS.SUNION :online, REDIS.keys('Online:*')), :busy
    # REDIS.DEL :online

    # begin
    #   REDIS.SUNIONSTORE :online, REDIS.keys('Online:*') 
    # rescue 
    #   REDIS.SUNIONSTORE :online, nil
    # end

    REDIS.SUNIONSTORE :online, REDIS.keys('Online:*') rescue REDIS.SUNIONSTORE :online, nil
    REDIS.EXPIRE :online, 3
  end

end

這段代碼是由較老的開發人員制作的,但他不再可用了,我需要在本地機器上完成這項工作。

提前致謝

UPDATE


我檢查了我的redis-cli MONITOR,一切都“很棒”,但我有以下問題,當用戶將狀態更改為ONLINE時,我在MONITOR上看到了這個:

1400661418.908947 [0 127.0.0.1:57453] "DEL" "Busy:537c63ea20db9040d2000332"
1400661418.909909 [0 127.0.0.1:57453] "SREM" "busy" "537c63ea20db9040d2000332"
1400661418.910687 [0 127.0.0.1:57453] "sadd" "Online:537c63ea20db9040d2000332" "537c63ea20db9040d2000332"
1400661418.911705 [0 127.0.0.1:57453] "expire" "Online:537c63ea20db9040d2000332" "2"
1400661419.436520 [0 127.0.0.1:62027] "keys" "Busy:*"
1400661419.437205 [0 127.0.0.1:62027] "SUNIONSTORE" "busy" ""
1400661419.437489 [0 127.0.0.1:62027] "EXPIRE" "busy" "3"
1400661419.437757 [0 127.0.0.1:62027] "keys" "Online:*"
1400661419.438070 [0 127.0.0.1:62027] "SUNIONSTORE" "online" "Online:537c63ea20db9040d2000332"

如果用戶改為BUSY,我看到了這個:

400661508.795043 [0 127.0.0.1:57453] "DEL" "Online:537c63ea20db9040d2000332"
1400661508.796853 [0 127.0.0.1:57453] "SREM" "online" "537c63ea20db9040d2000332"
1400661508.798088 [0 127.0.0.1:57453] "sadd" "Busy:537c63ea20db9040d2000332" "537c63ea20db9040d2000332"
1400661508.799496 [0 127.0.0.1:57453] "expire" "Busy:537c63ea20db9040d2000332" "2"
1400661509.157067 [0 127.0.0.1:62027] "keys" "Busy:*"
1400661509.157751 [0 127.0.0.1:62027] "SUNIONSTORE" "busy" "Busy:537c63ea20db9040d2000332"

但是當我使用redisdesktopmanager查看我的redis數據庫時,我沒有看到任何新記錄,但是如果我嘗試使用redis-cli手動創建記錄,則記錄成功創建,這可能是什么問題,這里? ???

縮小問題范圍的一種方法是使用redis-cli工具連接到Redis服務器(它似乎連接到系統上的Redis實例,腳本運行,並在生成的CLI中發出命令MONITOR貝殼。

然后運行腳本並觀察要進入的命令。當然,您還需要確保在運行腳本的系統上運行的Redis副本具有您需要的數據。 或者,您需要更改Redis connect命令以連接到數據所在的遠程計算機。

編輯更新的信息

所以代碼在鍵上設置過期2-3秒。 這是一個非常短暫的超時。 您查找記錄的時間很可能已過期。

例如,“忙”上的[EXPIRE][1]告訴Redis在修改后三秒鍾忽略“忙”。 我不確定那是你想要的。 “Busy:...”到期也告訴Redis在兩秒鍾后忽略該鍵。

我建議將過期的值更改為更長的時間,以便按照您希望的方式進行驗證。 你會知道2-3秒是否是一個“正確”的使用時間比你更好,但我懷疑它需要更長。 如果您希望在2秒后使用戶會話到期並且如此快速地使所有繁忙會話的設置到期,則監視命令將是您驗證它們的發送方式 - 而不是查找可能在時間到期的密鑰您可以發送命令來檢索它們。

如果可能的話,您還應該考慮嘗試替換keys命令,因為如果您的密鑰空間變大,這可能會破壞性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM