首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ruby在redis散列中设置数据

如何使用ruby在redis散列中设置数据
EN

Stack Overflow用户
提问于 2018-05-04 10:04:55
回答 1查看 1.6K关注 0票数 0

目前,我正在通过以下操作将数据从活动记录缓存到redis:

redis.rb

代码语言:javascript
复制
$redis = Redis::Namespace.new("bookstore", :redis => Redis.new)

authors_helper.rb

代码语言:javascript
复制
def fetch_authors
    authors = $redis.get('authors')
    if authors.nil?
      authors = Author.all.to_json
      $redis.set("authors", authors).to_json
      $redis.expire("authors", 5.hour.to_i)
    end
    JSON.load authors
end

因此,目前我正在使用基本的setget来缓存和读取redis中的数据。

我想使用hmset而不仅仅是set。找到这份工作的途径如下:

(只是一个例子)

代码语言:javascript
复制
HMSET user:1001 name "Mary Jones" password "hidden" email "mjones@example.com"

我的应用程序中的authors表由以下字段组成:idnamecreated_atupdated_at

使用hmset的红宝石方式是什么,这样我就可以在redis散列中缓存authors数据了?

EN

回答 1

Stack Overflow用户

发布于 2018-05-05 08:03:00

我不认为你能这样拯救所有的作者。这是因为散列只能为每个键存储一个值。因此,namecreated_at不能是键,因为所有作者都需要为这些键存储自己的值,但是您只能使用每个键一次。

如果您使用Rails,最好使用Rails.cache -这样您就不必担心Rails在Redis中存储对象的方式。

但是,如果您出于某种原因想要使用hmset,我相信您能做的最好的事情是:

authors = Author.all.flat_map { |author| [author.id.to_s, author.attributes.to_json] } $redis.hmset("authors", *authors_data)

第一行将返回如下内容:

['1', '{"name": "Mary Jones", "email": "m@example.com"}', '2', '{"name": "Another name", "email": "e@example.com"']

hmset命令不接受数组,而是一个简单的属性列表,这就是为什么在第2行中需要将*authors_data传递给函数的原因。

然后,在内部,它将如下所示:

{ '1' => '{"name": "Mary Jones", "email": "m@example.com"}', '2' => '{"name": "Another name", "email": "e@example.com"' }

稍后,您可以执行$redis.hmget("authors", '1'),这将返回一个字符串'{"name": "Mary Jones", "email": "m@example.com"}'

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

https://stackoverflow.com/questions/50172381

复制
相关文章

相似问题

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