rails 应用程序中的会话过多

Too many sessions in a rails application

我正在 rails 从头开始​​在 ruby 上构建一个 电子商务 网站。(这是我在 ruby 上的第一个项目在 rails)

我的产品属于一个子类别,而该子类别又属于一个类别。

我的过滤器部分包括 多个复选框 用于类别、子类别、additional_category(如手工制作的衣服、工厂制造等)、生活方式(放松、公司等)和 cloth_material_type(这有大约 30 个选项

我正在将每个案例的 5 个数组 发送到后端以搜索关联。

现在,当未登录的用户重新加载页面时,用户设置的过滤器将重置为默认值

为了避免这种情况,我想到了四个选项。

选项 1。将用户设置的过滤器值存储在 cookies 中,fast.But 它可能会降低用户浏览器的速度。

选项 2。使用 ActiveRecord::SessionStore gem 将值存储在会话中,这会将我的会话大小增加到 65K,但会降低应用程序的速度。

Option 3 .Using jquery modify/create document.url options 以便每个过滤器选项附加到 document.url 并在重新加载时我得到用户为 filtering.But 设置的参数,这看起来实施起来非常麻烦。

选项 4。使用 gem 如 rails 临时数据库

我选择了选项 2 并为此目的使用会话存储,但我认为将来维护它会变得很麻烦。

只是需要一些建议,比如其他 rails 电子商务网站如何解决这个问题,或者有没有更好的方法来解决这个问题。

Redis

我要做的是添加一个抽象层;具体来说,我认为你会从使用 Redis 或类似的 temporary db 中受益(正如你在问题中提到的那样)。

Redis 是一个 key:value 数据库,它主要存储 JSON 值供您在应用程序中使用。如果将其绑定到模型,您将能够存储临时值而不会影响应用的性能。

我认为您可以设置 Redis 来存储客人 ID,以及您的值的数组:

[guest_user_id] => [
    1 => "x"
    2 => "y"
    3 => ["z", "a", "b"]
]

您可以在初始化 Redis 系统时生成 guest_user_id,并将其存储在用户的 session 中。这样,您只在用户的浏览器中存储最少的数据,并且可以使用 Redis 数据填充各种控制器操作:

#config/routes.rb
resources :categories do
   resources :subcategories
end

#app/models/user.rb
Class User < ActiveRecord::Base
    def self.new_data
       # create guest_id and send to Redis
    end
end

这将允许您使用您的 guest_id 如果 用户未注册:

#app/controllers/products_controller.rb
class ProductsController < ApplicationController
    def show
        @user = user_signed_in? ? current_user : User.new_data
        #You'll then be able to populate their Redis values with the data from the product selection etc
    end
end 

我可以详细说明,但由于您只是在寻找建议,所以这就是我目前必须推荐的内容