Jea*_*ean 5 ruby ruby-on-rails redis
使用以下命令在我的控制台上启动redis服务器后:
redis-server
Run Code Online (Sandbox Code Playgroud)
我像这样执行以下ruby脚本:
script/user/generate_roster_kids.rb start
Run Code Online (Sandbox Code Playgroud)
但它不起作用,我得到:
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
Run Code Online (Sandbox Code Playgroud)
如果我再次执行相同的命令,我得到以下内容:
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
Run Code Online (Sandbox Code Playgroud)
但它不起作用,我做错了什么.
这是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
Run Code Online (Sandbox Code Playgroud)
这段代码是由较老的开发人员制作的,但他不再可用了,我需要在本地机器上完成这项工作.
提前致谢
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"
Run Code Online (Sandbox Code Playgroud)
如果用户改为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"
Run Code Online (Sandbox Code Playgroud)
但是当我使用redisdesktopmanager检查我的redis数据库时,我没有看到任何新记录,但是如果我尝试使用redis-cli手动创建记录,则记录成功创建,这可能是什么问题,这里? ???
缩小问题范围的一种方法是使用 redis-cli 工具连接到 Redis 服务器(它似乎正在连接到脚本运行所在系统上的 Redis 实例,并在生成的MONITORCLI shell 中发出命令。
然后运行脚本并观察命令的输入。当然,您还需要确保运行脚本的系统上运行的 Redis 副本包含您需要的数据。或者,您需要更改 Redis 连接命令以连接到数据所在的远程计算机。
编辑更新信息
因此,代码将密钥设置为 2-3 秒的过期时间。这是一个非常短的超时。当您查找记录时,这些记录很可能已过期。
例如,[EXPIRE][1]on“busy”告诉Redis在修改后三秒忽略“busy”。我不确定这就是你想要的。“Busy:...”的过期还告诉 Redis 在两秒后忽略该键。
我建议将过期值更改为更长的值,以便按照您想要的方式验证它。您会比我更好地知道 2-3 秒是否是您使用的“正确”过期时间,但我怀疑它需要更长的时间。如果您希望在 2 秒后使用户会话过期并如此快地使所有繁忙会话集过期是正确的,那么监视命令将是您验证它们是否正在发送的方式 - 而不是寻找当时可能过期的密钥您可以发送命令来检索它们。
如果可能的话,您还应该考虑尝试替换该keys命令,因为如果您的密钥空间变大,这可能会降低性能。
| 归档时间: |
|
| 查看次数: |
1404 次 |
| 最近记录: |