RubyのクラスをRedisに保存、復元してみる

RubyのクラスをRedisに保存、復元してみる

RubyのクラスをRedisに保存、復元してみる

RubyのクラスをRedisに保存、復元してみる へのコメントはまだありません

Redisを使い始めました。なかなか面白いですね。今回は単純な文字列のキー・バリューではなく、Rubyのクラス情報をRedisに保存し、再びクラスに復元する方法について記載します。

Redisのインストール方法については、この記事を参照ください。

まずは単純な文字列をRubyで保存、取得してみます。

[ruby]
require “redis”
redis = Redis.new

p “—— test simple key & value —— ”
#中身が空のほうが良いので、DB番号3を選択
redis.select(3)

p redis.keys(“*”)

#シンプルなキーとバリューを保存
redis.set(“aaa”,”taro”)
redis.set(“bbb”,”hanako”)

redis.keys(“*”).each do |key|
p “key = #{key} value = #{redis.get(key)}”
end
[/ruby]

実行結果

[bash]
“—— test simple key & value —— ”
[]
“key = bbb value = hanako”
“key = aaa value = taro”

[/bash]

クラスを作ります。(Personクラス)

[ruby]
class Person
attr_accessor :id , :name , :age

def initialize(id,name,age)
@id = id
@name = name
@age = age
end

def to_json(*a)
{
:id => @id,
:name => @name,
:age => @age
}.to_json
end

def self.from_json(json)
obj = self.new(1,2,3) #適当な値を突っ込む

obj.id = json[“id”]
obj.name = json[“name”]
obj.age = json[“age”]

return obj
end

end

[/ruby]

クラスデータをRedisに保存し、復元してみます。

Redisは固有のデータ構造は保持できないので、クラスデータをjsonにシリアライズしたものを保存します。クラスのto_jsonメソッドのデフォルトの動きではうまく動作しないので、上記のPersonクラスに to_json(*a) メソッドを定義してやることで対応します。クラスデータの復元はRedisからJSON文字列を取得し、パース。その後 Personクラスに定義した self.from_json(json)メソッドで復元します。

[ruby]
require “redis”
require “json”

redis = Redis.new

p “—— test class save & restore —— ”

#中身が空のほうが良いので、DB番号3を選択
redis.select(3)

#クラスデータを保存
ps = Person.new(1,”taro”,18)
redis.set(“ps-1″, ps.to_json())

ps = Person.new(2,”hanako”,23)
redis.set(“ps-2”, ps.to_json())

redis.keys(“ps-*”).each do |key|
p “key = #{key} value = #{redis.get(key)}”
end

#クラスデータを復元
json = JSON.parse(redis.get(“ps-1”))
ps = Person.from_json(json)

p “Person id=#{ps.id} / name=#{ps.name} / age=#{ps.age}”

redis.flushdb

[/ruby]

実行結果

[bash]
“—— test class save & restore —— ”
“key = ps-2 value = {\”id\”:2,\”name\”:\”hanako\”,\”age\”:23}”
“key = ps-1 value = {\”id\”:1,\”name\”:\”taro\”,\”age\”:18}”
“Person id=1 / name=taro / age=18”

[/bash]

シンプルですが、こういうことができるといろいろな応用ができると思います。良かったら一度試してみてください。

About the author:

Tags:

Related Posts

Leave a comment

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

Back to Top