Ruby on rails 每个Rails应用程序一台Redis服务器?
我的服务器上有一堆rails应用程序,应该能够使用Redis作为缓存引擎 我是否必须为我的每个应用程序启动一个Redis实例,或者Redis是否支持作用域 我担心如果我在一个应用程序中删除一个值,那么我所有的应用程序都会删除具有相同密钥的值 例如,我不希望发生这种情况 应用程序1Ruby on rails 每个Rails应用程序一台Redis服务器?,ruby-on-rails,redis,Ruby On Rails,Redis,我的服务器上有一堆rails应用程序,应该能够使用Redis作为缓存引擎 我是否必须为我的每个应用程序启动一个Redis实例,或者Redis是否支持作用域 我担心如果我在一个应用程序中删除一个值,那么我所有的应用程序都会删除具有相同密钥的值 例如,我不希望发生这种情况 应用程序1 Rails.cache.write(“键”、“值”) 应用程序2 Rails.cache.read(“key”)=>“value” 应用程序3 Rails.cache.delete(“key”) 应用程序1 Rails
Rails.cache.write(“键”、“值”)
应用程序2Rails.cache.read(“key”)=>“value”
应用程序3Rails.cache.delete(“key”)
应用程序1Rails.cache.read(“key”)=>nil
实现这一点的常用方法有两种:
- 用某种类型的“类型”标识符作为键的前缀,如
,app1:key
app2:key
- 对于每种使用,使用单独的DBs。默认情况下,连接从DB 0开始。如果对app1执行
,对app2执行SELECT 1
等操作,则可以保证没有其他应用程序会破坏该数据SELECT 2
- 我建议为每个应用程序运行一个服务器。每一个额外的Redis实例在清空时只会多使用1兆字节的内存,因此开销很小,在一个实例中运行数十台服务器是可以的。另外,空闲的Redis服务器将使用最小的内存量
因此,运行多台服务器基本上不会浪费资源,而是提高速度,因为您将使用所有CPU或CPU核心,因为Redis是单线程的。解决方案是使用名称空间参数
这是我的
config/production.rb
文件
# App 1
config.cache_store = :redis_store, {path: "/tmp/redis.sock", db:1, namespace: "app1"}
# App 2
config.cache_store = :redis_store, {path: "/tmp/redis.sock", db:2, namespace: "app2"}
用你的应用程序名或其他东西作为查找的前缀怎么样?事实上,Redis开发人员最近建议我不要使用单独的db,因为它更多的是为了向后兼容,并且没有理由不运行多个instance.Awesome。谢谢你的信息!但是为什么不运行多个实例呢?现在,如果应用程序2正在访问Redis,应用程序1将被阻止。。。