使用Ruby的class,将成员变量一起以JSON格式导出并注册到Redis中
首先
调查了如何在Redis中一次性注册Ruby类信息。
由于Json化后可以很好地进行注册,因此希望将类的成员变量整合到一起,并进行Json化注册。
获取Ruby类的实例变量
有一种方便的方法可以一次性获取Ruby的实例变量。
以下是引用内容的摘要。
class Book
def initialize(title, price)
@title = title; @price = price
end
end
book = Book.new("Programming Ruby", 2000)
p book.instance_variables # [:@title, :@price]
可以利用这个来一次性以json格式输出成员变量。
一次性输出JSON中的成员变量
我参考了以下链接: http://stackoverflow.com/questions/4464050/ruby-objects-and-json-serialization-without-rails。
def to_json
hash = {}
self.instance_variables.each do |var|
hash[var] = self.instance_variable_get var
end
hash.to_json
end
def from_json! string
JSON.load(string).each do |var, val|
self.instance_variable_set var, val
end
end
将信息存储到Redis中
现在只需使用上面的to_json将数据注册到Redis中。
为了简单起见,假设Redis已在本地主机上设置,而且端口未进行更改。
假设上述to_json方法已在之前的Book类中实现。
book = Book.new("Programming Ruby", 2000)
redis = Redis.new
redis.set "book" book.to_json
redis = Redis.new
book_json = redis.get "book"
book = Book.new
book.from_json! book_json
puts book.title # Programming Ruby
puts book.price # 2000