11
votes

Comment sauver l'objet Activerecord des rails à Redis

J'utilise Redis comme mon réseau de cache Web, et je souhaite stocker ces objets ActiveRecord à Redis directement, mais en utilisant REDIS-RB Je reçois une erreur.

Il semble que je ne puisse pas le sérialiser ou certains quoi. Y a-t-il une libéie de faire cela pour moi? Suis-je à sérialiser le format JSON?

Quel format de sérialisation serait le plus efficace?


0 commentaires

3 Réponses :


1
votes
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

1 commentaires

Semble Json est plus pratique pour moi, mais je ferai un test de performance contre la méthode du maréchal. Merci quand même.



15
votes

Redis stocke des cordes (et quelques autres structures de données de chaînes); Donc, vous pouvez sérialiser les valeurs de Redis mais vous aimez si longtemps que vous vous retrouvez avec une chaîne.

JSON est probablement le meilleur endroit pour commencer comme il est maigre, pas trop fragile, fonctionne bien avec des modèles de mise à niveau en direct et est lisible in situ. Plus tard, vous pouvez ajouter plus de complexité pour répondre à vos objectifs, selon vos besoins, par exemple la compression. #to_json et #from_json sont déjà sur Aciverecord si vous souhaitez utiliser JSON (avec Yajl ou son ILK qui ne devrait pas être excessivement lent, relativement parlant.) #to_xml est également là, si vous êtes dans S & M.

Le maréchalage cru peut également fonctionner, mais se trompe parfois horriblement (j'ai eu des objets marshalées dépassant 2 Mo après la compression de Lzo qui n'étaient que quelques k à Json.)

Si c'est vraiment un goulot d'étranglement pour vous, vous voudrez exécuter vos propres tests d'efficacité pour votre objectif (s), par exemple la vitesse d'écriture, la vitesse de lecture ou la taille de stockage, avec vos propres objets et modèles de données.


2 commentaires

Merci Yuri, tu m'as vraiment dit ce que je veux savoir. Il semble que Json est ma meilleure option ici ... merci encore!


Il suffit d'essayer cela maintenant, on dirait que le maréchal est le bon choix si vous y compris des associations. Cela va restaurer les choses dans le bon type. Avec JSON, les associations sont simplement stockées comme hatupes, vous obtenez donc une erreur en essayant de restaurer de_json.



1
votes

Vous pouvez convertir votre modèle en un hachage à l'aide des attributs, puis enregistrez-la avec mappé_hmset xxx


0 commentaires