无法在rails 6应用程序中命名redis客户端

wlwcrazw  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(369)

我目前正在尝试改进我的redis配置,允许一个redis客户端池根据这个线程连接到我的rails6应用程序在多线程rails环境中使用redis的最佳方式是什么(美洲狮(puma/sidekiq)
尽管在实现上述功能之前,我试图命名我的rails应用程序正在共享的唯一redis客户端,但无法实现这一功能。
redis.yml公司

development:
  url: redis://localhost:6379/
  db: 0
  id: my_rails_redis

production:
  url: 
  db: 0

test: 
  url: redis://localhost:6379/
  db: 1

redis.rb版

conf = Rails.application.config_for(:redis)
redis = Redis.new(conf)

一切正常。我的电话 Redis.current 工作正常了吗 redis-cli 我打字的时候 client list 我得到以下列表:

id=57 addr=127.0.0.1:60754 fd=19 name= age=1099 idle=422 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=hget
id=58 addr=127.0.0.1:60756 fd=20 name=ActionCable-PID-18018 age=1099 idle=422 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=publish
id=47 addr=127.0.0.1:60702 fd=8 name= age=1110 idle=1 flags=b db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=brpop
id=48 addr=127.0.0.1:60704 fd=9 name= age=1110 idle=1 flags=b db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=brpop
id=65 addr=127.0.0.1:32896 fd=17 name=ActionCable-PID-19465 age=460 idle=422 flags=N db=0 sub=3 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=subscribe
id=49 addr=127.0.0.1:60706 fd=10 name= age=1110 idle=1 flags=b db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=brpop
id=50 addr=127.0.0.1:60708 fd=11 name= age=1110 idle=5 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=scard
id=63 addr=127.0.0.1:32784 fd=15 name= age=472 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client
id=66 addr=127.0.0.1:32994 fd=18 name= age=424 idle=424 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=hget
id=67 addr=127.0.0.1:32996 fd=21 name=Sidekiq-server-PID-19455 age=424 idle=424 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=exec
id=64 addr=127.0.0.1:32790 fd=16 name= age=460 idle=447 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=hvals
id=62 addr=127.0.0.1:32782 fd=14 name=ActionCable-PID-19477 age=474 idle=460 flags=N db=0 sub=1 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=unsubscribe
id=51 addr=127.0.0.1:60710 fd=12 name= age=1110 idle=1 flags=b db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=brpop
id=52 addr=127.0.0.1:60712 fd=13 name= age=1110 idle=1 flags=b db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=brpop

属于actioncable或sidekiq的客户端被正确标记,尽管我看不到任何调用的客户端 my_rails_redis .
我错过什么了吗?

unftdfkk

unftdfkk1#

我的错误在美洲豹再次启动后,它似乎又重蹈覆辙了。
结果非常有趣,因为我希望创建一个redis客户端,但现在看起来是这样的:

id=79 addr=127.0.0.1:33576 fd=19 name=Sidekiq-server-PID-21977 age=5 idle=5 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=exec
id=73 addr=127.0.0.1:33458 fd=11 name=my_rails_redis age=17 idle=2 flags=b db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=brpop
id=74 addr=127.0.0.1:33460 fd=12 name=my_rails_redis age=17 idle=0 flags=b db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=brpop
id=63 addr=127.0.0.1:32784 fd=15 name= age=1829 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client
id=69 addr=127.0.0.1:33450 fd=14 name=ActionCable-PID-21999 age=34 idle=14 flags=N db=0 sub=1 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=unsubscribe
id=80 addr=127.0.0.1:33586 fd=20 name= age=4 idle=3 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=hget
id=81 addr=127.0.0.1:33588 fd=21 name=ActionCable-PID-22041 age=4 idle=3 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=publish
id=77 addr=127.0.0.1:33568 fd=17 name=my_rails_redis age=12 idle=2 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=exec
id=70 addr=127.0.0.1:33452 fd=8 name=my_rails_redis age=17 idle=1 flags=b db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=brpop
id=71 addr=127.0.0.1:33454 fd=9 name=my_rails_redis age=17 idle=2 flags=b db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=brpop
id=76 addr=127.0.0.1:33566 fd=16 name=ActionCable-PID-21987 age=13 idle=3 flags=N db=0 sub=3 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=subscribe
id=75 addr=127.0.0.1:33464 fd=13 name= age=14 idle=14 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=hvals
id=72 addr=127.0.0.1:33456 fd=10 name=my_rails_redis age=17 idle=2 flags=b db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=brpop
id=78 addr=127.0.0.1:33574 fd=18 name= age=5 idle=5 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=hget

我甚至不确定我是否需要创建一个池,如果只有创建redis客户端 redis = Redis.new(conf) 变成了许多不同的客户。。
谜团有待进一步挖掘。。
为那些会遇到和我一样问题的人编辑:
实际上,我在sidekiq中使用了redis.yml conf。尽管有一些sidekiq redis客户机被命名,但其他一些没有(sidekiq.rb配置文件的服务器部分)。
然后我搬走了 id: my_rails_redis 从redis.yml不破坏每一个配置文件使用redis配置
我修改了sidekiq.rb如下:

conf = Rails.application.config_for(:redis)
confid = conf.merge({id: "Sidekiq-server-PID-#{::Process.pid}"})
confservid = conf.merge({id: "Sidekiq-server"})

if Rails.env.development?
  Sidekiq.configure_client do |config|         
    config.redis = confid       
  end

  Sidekiq.configure_server do |config|    
    config.redis = confservid    
  end

end

每个sidekiq redis客户端的名字。
另外,问题的关键是,在redis.rb中,我初始化了一个redis客户机,尽管我的代码中没有使用它,因为它被分配了一个本地示例(“redis”):

conf = Rails.application.config_for(:redis)
conf[:id] = "Rails_redis_client"
redis = Redis.new(conf)

事实上,我用的是 Redis.current 在我的密码里。 redis 不可用。
然后切换到常数:

Red_g = Redis.new(conf)

以及使用 Red_g (对于redis\ u global)而不是 Redis.current 碰巧解决了我的问题:命名工作。

相关问题