就是鸟巢和Redis的命名空间宝石之间的平均差异时,我们使用导轨/红宝石的Redis(what is

2019-10-18 14:35发布

有添加命名空间Redis的两个流行的宝石:Redis的命名空间鸟巢 ,如果我真的能理解我们需要命名空间时,我们使用不同的Redis项目的同一实例的服务器,如果我是对的,这意味着:如果我有项目- 1和项目2和每个项目的用我的本地Redis的存储,那么也许这两个项目具有represente我的应用程序的用户的用户的关键,因此要防止我需要命名空间的用户关键的东西,如项目的名称冲突:

项目1:

project-1:users

项目-1

project-2:users

如果我的理解上面是没有错的,我们可以使用redis-namespace gem来解决这个是这样的:

r = Redis::Namespace.new(:project-1, :redis => @r)
r['users']['joe']['email'] = 'joe@example.com'

而对于第二个项目(项目2)只需要实例化时,新的Redis ::命名空间来改变项目1到项目2:

 r = Redis::Namespace.new(:project-2, :redis => @r)
 r['users']['joe']['email'] = 'joe@example.com'

请告诉我,如果我没有错这一切上面的解释!

我们现在可以继续巢:

从文档 ,我们有这样的例子:

鸟巢可以帮助您通过提供已经连接到Redis的环连接的命名空间生成密钥:

>> event = Nest.new("event")
>> event[3][:attendees].sadd("Albert")
>> event[3][:attendees].smembers
=> ["Albert"]

但在这里,我不知道如果Nest帮我们做同样的事情Redis的命名空间,或帮助我们只是产生一个可链接键???

究竟是什么Redis的命名空间和鸟巢之间的区别?

Answer 1:

免责声明:我是鸟巢的作者。

你可以完成与这两个库一样,我认为这些工具之间的主要区别是其内部的复杂性。 虽然鸟巢不仅可以帮助你在代表与平键结构,Redis的::命名空间为每个命令翻译表,它因此更加脆弱和CPU密集型。

看看这两个工具的源代码,看看我的意思:

https://github.com/soveran/nest/blob/master/lib/nest.rb

https://github.com/resque/redis-namespace/blob/master/lib/redis/namespace.rb

这就是说,你所描述的问题的正确解决方案是针对不同项目的独立Redis的实例。 认为密钥空间中只有一个要考虑到(其可也与由Redis的所提供的不同DB迎刃而解)方面。 其他方面(持久化策略,连接和内存限制,关键驱逐等)根据项目的性质,通常微调。

另一个重要的事实是,Redis的是单线程的,和许多应用程序都使用它,你受到共享相同的核心的所有请求。 考虑到这一点,具有不同的Redis实例可以帮助您并行工作。



Answer 2:

你知道http://redis.io/commands/select为他平行一台服务器上的多个数据库的运行? 在这里,您没有按键冲突和数据库是分开的。 只有当你从所有数据库访问键一次这是不可能的。



文章来源: what is the mean difference between Nest and redis-namespace gems when we use redis with rails/ruby