[英]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.