我目前正在尝试改进我的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
.
我错过什么了吗?
1条答案
按热度按时间unftdfkk1#
我的错误在美洲豹再次启动后,它似乎又重蹈覆辙了。
结果非常有趣,因为我希望创建一个redis客户端,但现在看起来是这样的:
我甚至不确定我是否需要创建一个池,如果只有创建redis客户端
redis = Redis.new(conf)
变成了许多不同的客户。。谜团有待进一步挖掘。。
为那些会遇到和我一样问题的人编辑:
实际上,我在sidekiq中使用了redis.yml conf。尽管有一些sidekiq redis客户机被命名,但其他一些没有(sidekiq.rb配置文件的服务器部分)。
然后我搬走了
id: my_rails_redis
从redis.yml不破坏每一个配置文件使用redis配置我修改了sidekiq.rb如下:
每个sidekiq redis客户端的名字。
另外,问题的关键是,在redis.rb中,我初始化了一个redis客户机,尽管我的代码中没有使用它,因为它被分配了一个本地示例(“redis”):
事实上,我用的是
Redis.current
在我的密码里。redis
不可用。然后切换到常数:
以及使用
Red_g
(对于redis\ u global)而不是Redis.current
碰巧解决了我的问题:命名工作。