Ruby on rails 如何获取多rails版本应用程序中连接的redis数据?

Ruby on rails 如何获取多rails版本应用程序中连接的redis数据?,ruby-on-rails,redis,Ruby On Rails,Redis,我正在使用redis缓存在rails应用程序中获取数据。简单地说,我可以说我有两个应用程序,第一个基于rails4,第二个基于rails6。我必须在两个应用程序中都使用缓存数据 在rails 4应用程序中:-我在rails 4应用程序中创建了缓存,它成功地获取了数据 Rails.cache.fetch("test_cache"){User.last} => #<User id: 100973, email: "xxxx.com", encrypted_password: "$2a$1

我正在使用redis缓存在rails应用程序中获取数据。简单地说,我可以说我有两个应用程序,第一个基于rails4,第二个基于rails6。我必须在两个应用程序中都使用缓存数据

在rails 4应用程序中:-我在rails 4应用程序中创建了缓存,它成功地获取了数据

Rails.cache.fetch("test_cache"){User.last}
=> #<User id: 100973, email: "xxxx.com", encrypted_password: "$2a$10$D8aOhoSWvNWeEQE2swAX2OEVIF5H0aY8sR/fGVQ3BhU...........> 
然后我找到了一个解决方案,使用
将数据保存为json

Rails.cache.fetch("test_cache"){User.last.as_json}
它成功地在两个应用程序上工作并获取了数据,但我还有一个问题,即如何访问
模型方法、关联等…


有什么建议或想法吗

对于缓存Rails中的非字符串值,使用
封送.dump
(对于较大的值,还通过deflate压缩它)。封送数据可以被认为是介于数据和代码之间的东西,因为它引用了类名和内部结构。这就是它有局限性的原因:它只能用相同的ruby版本(请参阅)进行解组,并且应用程序应该有相同的类

显然,
ActiveRecord::Base
结构在rails 4和rails 6中不同,因此在编组时不兼容

要实现兼容性,您唯一的选择是只缓存基本的ruby类型和PORO,它们不会引用应用程序中任何不同的类。您尝试将
作为_json
来存储模型的散列表示

但实际上,第一步是再次思考究竟要缓存什么以及为什么要缓存,有几种想法需要考虑:

  • 当然,Redis/Memcache速度很快,但访问它仍然是一个数据库查询,并有相应的开销。从SQL数据库(如
    User.find(此处为主键\u值)
    )的简单读取速度几乎相同
  • AR模型有用于关联的缓存,而且您可能有一些已记忆的数据,您可能会遇到这些缓存的数据暂停
  • 访问非缓存关联仍将导致数据库调用
  • 最可能的情况是,您希望缓存的不是模型本身,而是更容易找到它(例如,如果它是一些昂贵计算的结果)或某些派生数据的方法。在前一种情况下,存储记录id就足够了,在后一种情况下,您可以存储类似于哈希/PORO的内容,以及您需要的所有数据,如:
  • hash=Rails.cache.fetch(“上次注册的用户”){
    User.last.yield_self{u|
    {
    用户id:u.id,
    姓名:u.name,
    注册地址:创建地址:,
    受邀人:受邀人姓名
    }
    }
    }
    
    感谢您的回复,我已经开始使用POROs了。:)但我关心的是如何执行模型方法。因为我的项目存在大量缓存data@code_aks要使用模型,您可以在需要时通过id获取它们
    Rails.cache.fetch("test_cache"){User.last.as_json}