首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails:从活动记录会话存储区移动到Redis存储区

Rails:从活动记录会话存储区移动到Redis存储区
EN

Stack Overflow用户
提问于 2012-08-14 03:03:50
回答 1查看 2.4K关注 0票数 4

我有一个很大的应用程序,有上千个活动会话。我想使用this迁移到Redis会话存储。理想情况下,我希望我当前的会话保持活跃。

有没有迁移活动会话的经验?我假设我编写了一个迁移或rake任务(我认为是迁移,所以我可以删除旧的表作为其中的一部分),并且我只想将所有当前的详细信息写入redis。

代码语言:javascript
复制
old_sessions = ActiveRecord::Base.connection.select_all("select * from sessions")
old_sessions.each { |session| $redis.set(????? ????) }

但我担心数据的完整性。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-14 07:50:10

好了,经过一天的修改,我想出了以下几点:

代码语言:javascript
复制
class MoveActiveRecordSesionsIntoRedis < ActiveRecord::Migration
  def up
    #get all the sessions from the last month
    old_sessions = ActiveRecord::Base.connection.select_all("select * from sessions where updated_at > '#{Time.now - 1.month}'")

    old_sessions.each do |session|


      #convert the base64 data back into the object
      data = ActiveRecord::SessionStore::Session.unmarshal(session["data"])

      #load each session into Redis, dumping the object appropriately      
      $redis.setex session["session_id"], 
                   1.month.to_i, 
                   Marshal.dump(data).to_s.force_encoding(Encoding::BINARY)
    end

    #drop the old session table (So long unecessary 3Gigs!)
    drop_table :sessions
  end

  def down
    raise ActiveRecord::IrreversibleMigration, "Session face-plant!"
  end
end

我把这个放在这里作为参考。如果你发现有什么问题,我洗耳恭听。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11940633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档