我正在使用redis作为我的Web缓存,我想直接将那些activerecord对象存储到redis中,但是使用redis-rb时出现了错误。
似乎我无法对其进行序列化或某种操作。有没有库可以帮我做这个?
我必须将其序列化为JSON格式吗?
哪种序列化格式最有效?
似乎我无法对其进行序列化或某种操作。有没有库可以帮我做这个?
我必须将其序列化为JSON格式吗?
哪种序列化格式最有效?
Redis存储字符串(以及一些其他的字符串数据结构);因此,只要最终得到一个字符串,您可以以任何方式将其序列化为Redis值。
JSON可能是最好的起点,因为它很简洁,不太脆弱,在现场升级模式下工作良好,并且可在原地阅读。稍后,您可以添加更多复杂性以满足您的目标,例如压缩。如果要使用JSON(使用YAJL或类似工具,相对而言速度不应过慢),则ActiveRecord上已经有了#to_json和#from_json。如果您喜欢S&M,#to_xml也可以使用。
原始编组也可以使用,但有时会出现可怕的错误(我曾经遇到过编组对象在LZO压缩后超过2MB,而在JSON中只有几K)。
如果这真的是您的瓶颈,您将希望针对您的目标运行自己的效率测试,例如写入速度、读取速度或存储大小,使用您自己的对象和数据模式。
def redis_set()
redis.mapped_hmset("namespace:modelName:#{self.id}", self.attributes)
end
def redis_get(id)
redis.hgetall("namespace:modelName:#{id}")
end
def self.set(friend_list, player_id)
redis.set("friend_list_#{player_id}", Marshal.dump(friend_list)) == 'OK' ? friend_list : nil
end
def self.get(player_id)
friend_list = redis.get("friend_list_#{player_id}")
Marshal.load(friend_list) if friend_list
end