如何使用Redis在Sinatra中存储会话值?

时间:2015-03-04 17:33:04

标签: ruby redis sinatra

我正在尝试使用Sinatra和Redis建立一个集群,我需要在redis上存储会话值才能使用,但我找不到文档。

任何人都知道怎么做?

谢谢。

3 个答案:

答案 0 :(得分:1)

您可以访问一个会话对象,例如

get "/bar" do
  session["hello"] = hello
end

答案 1 :(得分:1)

您只需要在Sinatra中启用会话,并使用set函数将所需的任何值从该会话对象保存到redis。

enable :sessions
redis.set("session_value", session[:value])

答案 2 :(得分:0)

这里有更详细的答案。我认为使用Sinatra和Redis非常简单。

将Redis gem添加到应用程序中。如果您使用的是Gemfile,请将其添加到那里。

gem 'redis'

接下来,您应该在应用程序中管理Redis URL:

ENV['REDIS_URL'] ||= 'redis://localhost:6379'
# Redis configuration
RedisURI = URI.parse(ENV["REDIS_URL"])

如果未设置REDIS_URL,则应用程序将使用localhost。对于生产部署,您应将其设置为实际生产的Redis服务器。

接下来是解析它:

REDIS = Redis.new(host: RedisURI.host, port: RedisURI.port, password: RedisURI.password)

REDIS常量是您可以使用的Redis连接。

REDIS.set(param, value) # Set some param to value
REDIS.get(:description) # get description key

在您的情况下,您应该为每个客户使用唯一键。您可以通过Sinatra的方法处理客户的cookie:

response.set_cookie(:foo, 'bar')
request.cookies[:foo]
response.delete_cookie(:foo)

使用此代码,它将非常清楚......

您也可以在Redis中实现会话expire