Ruby on rails 如何获取多rails版本应用程序中连接的redis数据?
我正在使用redis缓存在rails应用程序中获取数据。简单地说,我可以说我有两个应用程序,第一个基于rails4,第二个基于rails6。我必须在两个应用程序中都使用缓存数据 在rails 4应用程序中:-我在rails 4应用程序中创建了缓存,它成功地获取了数据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
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
来存储模型的散列表示
但实际上,第一步是再次思考究竟要缓存什么以及为什么要缓存,有几种想法需要考虑:
User.find(此处为主键\u值)
)的简单读取速度几乎相同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}