加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails和Redis

发布时间:2020-12-16 21:02:41 所属栏目:百科 来源:网络整理
导读:使用以下命令在我的控制台上启动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] Pr
使用以下命令在我的控制台上启动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命令,因为如果您的密钥空间变大,这可能会破坏性能.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读