1

我正在尝试使用redis-objects Ruby gem 将一些 Redis 数据存储在列表中。

我可以按照文档中的示例创建一个列表。

我可以使用 lrange 从 Redis 中找到列表。不确定这是否是最好的方法,我找不到 redis-objects 提供的方法。

最初,当我迭代列表中的元素时,我以哈希的形式获得元素。

但是,在我使用 lrange 获得列表后,这些不是哈希值,我无法访问数据。

找到列表并以哈希形式获取项目的适当方法是什么?

您可以看到下面的代码和控制台的输出。

@list = Redis::List.new('list_name', :marshal => true)
@list << {:name => "Nate", :city => "San Diego"}
@list.each do |el|
    puts el
    puts el.class
    puts "#{el[:name]} lives in #{el[:city]}"
end

redis = Redis.current
@list = redis.lrange("list_name", 0, -1)
@list.each do |el|
    puts el
    puts el.class
    puts "#{el[:name]} lives in #{el[:city]}"
end

每个看跌期权:

{:name=>"Nate", :city=>"San Diego"}
Hash
Nate lives in San Diego
{:  nameI"  Nate:ET:    cityI"San Diego;T
String
Completed 500 Internal Server Error in 349ms

TypeError - no implicit conversion of Symbol into Integer:
4

1 回答 1

0

对。下面来自 Gem 文档的文本解释了它!

有一个 Ruby 类映射到每个 Redis 类型,每个 Redis API 命令都有方法。请注意,调用 new 并不意味着它实际上是一个“新”值——它只是在该 Ruby 对象和相应的 Redis 数据结构之间创建一个映射,该数据结构可能已经存在于 redis-server 上。

所以我不需要使用 lrange 来进入列表。使用Redis::List.new('list_name', :marshal => true)将使我掌握列表的句柄。然后我可以从列表中迭代、添加或删除项目。

读书有帮助...

于 2015-12-22T18:47:54.737 回答