【问题标题】:Redis-objects Ruby gem, how to retrieve Redis list and iterate?Redis-objects Ruby gem,如何检索 Redis 列表和迭代?
【发布时间】:2015-12-23 02:47:54
【问题描述】:

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

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

我可以使用 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:

【问题讨论】:

    标签: ruby redis redis-objects


    【解决方案1】:

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

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

    所以我不需要使用 lrange 来访问列表。使用Redis::List.new('list_name', :marshal =&gt; true) 会让我掌握列表。然后我可以迭代、添加或删除列表中的项目。

    阅读有帮助...

    【讨论】:

      猜你喜欢
      • 2017-06-06
      • 2016-02-01
      • 2011-10-25
      • 1970-01-01
      • 2015-01-18
      • 2012-05-20
      • 1970-01-01
      • 2013-06-19
      • 1970-01-01
      相关资源
      最近更新 更多